我有一个数组
const dataitems = [
{name:'test1', id:1},
{name:'test2', id:2},
{name:'test3', id:3}
]
const compares = [1,3]
所以我只想获取ID包含在compares数组值中的数据项的值
所以最后我希望有一个最终数组为
const ffinaldataitems = [
{name:'test1', id:1},
{name:'test3', id:3}
]
其中不包含ID 2
所以我尝试了以下方法,但被卡住了
let finaldataitems = []
dataitems.forEach(item=>{
if(item.id ) //stuck on how to check and push to the array
})
我如何进行
答案 0 :(得分:1)
您可以尝试使用Array.prototype.filter()
filter()
方法将创建一个新数组,其中包含所有通过提供的功能实现的测试的元素。
includes()
方法确定数组的条目中是否包含某个值,并根据需要返回true或false。
const dataitems = [
{name:'test1', id:1},
{name:'test2', id:2},
{name:'test3', id:3}
];
const compares = [1,3];
let finaldataitems = dataitems.filter(item => compares.includes(item.id));
console.log(finaldataitems);
答案 1 :(得分:0)
您可以将false
转换为compares
,然后在Set
上使用filter()
,并使用dataitems
来检查是否包含了对象的id
注意:为简单起见,您可以在不使用Set.prototype.has
的情况下Set
进行操作,但这会将算法的时间复杂度从includes()
更改为{{1 }}
O(n)
另一种方法是制作一个对象,其键将O(n ^ 2)
个项。然后在const dataitems = [
{name:'test1', id:1},
{name:'test2', id:2},
{name:'test3', id:3}
]
const compares = [1,3];
let set = new Set(compares);
const res = dataitems.filter(x => set.has(x.id));
console.log(res)
上使用id
从先前制作的对象中返回该项目。
map()
答案 2 :(得分:0)
在循环中时,可以使用item.id
检查compares
是否存在于indexOf
数组中:
const dataitems = [{
name: 'test1',
id: 1
},
{
name: 'test2',
id: 2
},
{
name: 'test3',
id: 3
}
];
const compares = [1, 3];
let finaldataitems = []
dataitems.forEach(item => {
if (compares.indexOf(item.id) > -1)
finaldataitems.push(item);
});
console.log(finaldataitems);