首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在对象中添加新道具时尝试使用过滤器

在对象中添加新道具时尝试使用过滤器
EN

Stack Overflow用户
提问于 2021-07-30 06:39:43
回答 2查看 20关注 0票数 0

我有一个任务,但我的解决方案不能正常工作。我有一个数组的对象“伴侣”,每个对象组成属性,姓名和年龄的每个伴侣(人)的任务是创建一个新的属性“朋友”,这应该包括伴侣的名字数组。

数组中的每个对象都有道具名称,所以道具朋友必须包含所有与自己的名称不同的对象名称。

我已经做了一个解决方案,但是朋友数组仍然包含所有的名称,包括当前对象的名称

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS lessons6</title>
</head>
<!--<h1>Lesson 6</h1>-->
<body>

<!--<script src="mainForStudents.js"></script>-->
<script>

    let mates = [
        {name: 'john', age: 44},
        {name: 'bob', age: 33},
        {name: 'sam', age: 2},
    ]

    let updatedMates = mates.map(el => (
        {...el, friends: mates.map(el => el.name).filter(el => el !== el.name)}
        
    ))

    console.log(updatedMates)

</script>


</body>
</html>

EN

回答 2

Stack Overflow用户

发布于 2021-07-30 06:43:47

您在任何地方都使用相同的el变量名。在查找变量时,最后一个filter()方法不必在最外层的map()中查找el,因为作用域中已经存在el

您可以更改变量名来完成此操作:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS lessons6</title>
</head>
<!--<h1>Lesson 6</h1>-->
<body>

<!--<script src="mainForStudents.js"></script>-->
<script>

    let mates = [
        {name: 'john', age: 44},
        {name: 'bob', age: 33},
        {name: 'sam', age: 2},
    ]

    let updatedMates = mates.map(el => (
        {...el, friends: mates.map(el1 => el1.name).filter(el2 => el2 !== el.name)}
        
    ))

    console.log(updatedMates)

</script>


</body>
</html>

注意:并不需要将内部.map()中的变量名从el更改为el1。但我建议你这样做,这样你就可以避免将来出现这样的问题。

票数 1
EN

Stack Overflow用户

发布于 2021-07-30 06:47:45

请看内图和外图的变量。我看到了同样的"el“。正确的做法是:

代码语言:javascript
复制
    let updatedMates = mates.map(el => (
        {...el, friends: mates.map(el => el.name).filter(em => em !== el.name)}
        
    ))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68586467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档