我遇到了以下问题。我要执行以下操作,有一个5个元素的数组,我想向第二个数组中包含的元素添加一个属性和isExist,否则保持对象不变。
我尝试使用map方法,但是它向我返回了一个数组数组,而我只需要返回前2个对象的附加属性就返回相同的数组。
const arr1 = [{id: 1, title:'test1'}, {id: 2, title:'test2'}, {id: 3, title:'test3'},{id: 4, title:'test4'} ,{id: 5, title:'test5'}];
const arr2 = [{id: 1, title:'test1'}, {id: 2, title:'test2'}];
const filteredArr = arr1.filter(item => {
return arr2.filter(item2 => {
if (item2.id === item.id) {
return {...item, isExist: true}
} else {
return {...item}
}
})
})
预期结果:在第一个数组中,ID为1和2的对象应另外包含isExist属性,其余应保留在数组中,但不包含isExist属性。
答案 0 :(得分:0)
您可以使用地图和一些
arr1
映射,检查id
上每个元素的arr2
isExist
,否则返回原始值
const arr1 = [{id: 1, title:'test1'}, {id: 2, title:'test2'}, {id: 3, title:'test3'},{id: 4, title:'test4'} ,{id: 5, title:'test5'}];
const arr2 = [{id: 1, title:'test1'}, {id: 2, title:'test2'}];
let op = arr1.map(value => {
let isExist = arr2.some(e => e.id === value.id)
return isExist ? {...value,isExist} : value
})
console.log(op)
答案 1 :(得分:0)
一种选择是使用Set
获取arr2
上的所有ID。使用map
遍历arr1
const arr1 = [{"id":1,"title":"test1"},{"id":2,"title":"test2"},{"id":3,"title":"test3"},{"id":4,"title":"test4"},{"id":5,"title":"test5"}]
const arr2 = [{"id":1,"title":"test1"},{"id":2,"title":"test2"}]
const ids = new Set(arr2.map(o => o.id));
const filteredArr = arr1.map(item => {
if (ids.has(item.id)) return { ...item,isExist: true}
else return item;
})
console.log(filteredArr)
更短版本:
const arr1 = [{"id":1,"title":"test1"},{"id":2,"title":"test2"},{"id":3,"title":"test3"},{"id":4,"title":"test4"},{"id":5,"title":"test5"}];
const arr2 = [{"id":1,"title":"test1"},{"id":2,"title":"test2"}];
const ids = new Set(arr2.map(o => o.id));
const filteredArr = arr1.map(item => ids.has(item.id) ? {...item,isExist: true} : item);
console.log(filteredArr)