Javascript仅获取特定数组中包含的对象

时间:2019-07-09 03:50:33

标签: javascript

我有一个数组

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
  })

我如何进行

3 个答案:

答案 0 :(得分:1)

您可以尝试使用Array.prototype.filter()

  

filter()方法将创建一个新数组,其中包含所有通过提供的功能实现的测试的元素。

还有Array.prototype.includes()

  

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);