我正在尝试检查第一个数组是否包含与第二个数组中的第一个元素具有相同id的对象。然后,对于第一个数组中的该对象,添加以下2个属性值。我尝试了以下方法,但它只返回一个新值的数组,而不是返回包含具有新属性的已修改对象的完整的第一个对象数组。
products = products
.filter(item => item.id === productsByTags[0].id)
.map(item => (item.tags = 'shoes'), (item.keywords = 'black'))我如何才能获得对象的完整数组,其中这两个新的属性和值被添加到基于上述条件具有相同id的对象中?
发布于 2020-10-01 00:24:45
您需要通过扩展实际对象和两个新属性来返回一个新对象。
.map(item => ({ ...item, tags: 'shoes', keywords: 'black' }))发布于 2020-10-01 00:27:59
您遇到的问题是.filter和.map都返回新数组。因此,一旦您进行了筛选,您就已经删除了与您的检查不匹配的所有项目。如果您将其全部移动到单个映射中,则可以仅变异您想要的项,同时仍然返回无变异的项。
products = products.map(item => {
let newItem = {...item};
if(item.id === productsByTags[0].id){
newItem.tags = 'shoes';
newItem.keywords = 'black';
}
return newItem;
})发布于 2020-10-01 00:35:39
products = products
.filter(item => item.id === productsByTags[0].id)
.map(item => {
item.tags = 'shoes';
item.keywords = 'black';
return item;
});过滤数据后,您试图将新属性添加到object中,因此您应该返回要映射的对象,以返回对象数组。
https://stackoverflow.com/questions/64141692
复制相似问题