首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >下面的比较和对象属性实现只返回2个值(JS),有什么问题吗?

下面的比较和对象属性实现只返回2个值(JS),有什么问题吗?
EN

Stack Overflow用户
提问于 2020-10-01 00:19:08
回答 3查看 31关注 0票数 1

我正在尝试检查第一个数组是否包含与第二个数组中的第一个元素具有相同id的对象。然后,对于第一个数组中的该对象,添加以下2个属性值。我尝试了以下方法,但它只返回一个新值的数组,而不是返回包含具有新属性的已修改对象的完整的第一个对象数组。

代码语言:javascript
运行
复制
 products = products
        .filter(item => item.id === productsByTags[0].id)
        .map(item => (item.tags = 'shoes'), (item.keywords = 'black'))

我如何才能获得对象的完整数组,其中这两个新的属性和值被添加到基于上述条件具有相同id的对象中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-01 00:24:45

您需要通过扩展实际对象和两个新属性来返回一个新对象。

代码语言:javascript
运行
复制
.map(item => ({ ...item, tags: 'shoes', keywords: 'black' }))
票数 1
EN

Stack Overflow用户

发布于 2020-10-01 00:27:59

您遇到的问题是.filter和.map都返回新数组。因此,一旦您进行了筛选,您就已经删除了与您的检查不匹配的所有项目。如果您将其全部移动到单个映射中,则可以仅变异您想要的项,同时仍然返回无变异的项。

代码语言:javascript
运行
复制
products = products.map(item => {
    let newItem = {...item};
    if(item.id === productsByTags[0].id){
      newItem.tags = 'shoes';
      newItem.keywords = 'black';
    }
    return newItem;
  })
票数 0
EN

Stack Overflow用户

发布于 2020-10-01 00:35:39

代码语言:javascript
运行
复制
products = products
        .filter(item => item.id === productsByTags[0].id)
        .map(item => {
  item.tags = 'shoes'; 
  item.keywords = 'black';
  return item;
});

过滤数据后,您试图将新属性添加到object中,因此您应该返回要映射的对象,以返回对象数组。

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

https://stackoverflow.com/questions/64141692

复制
相关文章

相似问题

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