如何根据可能的 ID 属性列表过滤对象数组?

我正在尝试过滤arr2. 如果该元素没有在 中列出的 ID arr,那么我希望将其删除。我怎样才能在 javascript 中做到这一点?


var arr= ["a", "b", "d"]

var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]

result:

[{id:"a", value:1},{id:"b", value:2}]

提前致谢 :)


慕虎7371278
浏览 121回答 4
4回答

慕容708150

reduce您可以在回调函数中使用并检查arr includes对象是否id处于迭代状态。如果是这样,则将元素添加到累加器数组中var arr = ["a", "b", "d"]var arr2 = [{  id: "a",  value: 1}, {  id: "b",  value: 2}, {  id: "c",  value: 3}];const newData = arr2.reduce((acc, curr) => {  if (arr.includes(curr.id)) {    acc.push(curr)  }  return acc;}, []);console.log(newData)

Helenr

使用 filter、reduce 和 include 的速度几乎是简单使用循环的两倍。为了引导您完成它,它所做的就是检查第二个数组中的每个元素并检查它的 id 属性是否在第一个数组中,如果是,它会克隆它。另外,为了将来参考,该标题写得不好。一个更好的标题是“如何根据可能的 ID 属性列表过滤对象数组”var arr= ["a", "b", "d"]var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]let clone = []for(let i = 0;i < arr2.length;i++){&nbsp; &nbsp; for(let j = 0;j < arr.length; j++) if(arr2[i].id === arr[j]) clone.push(arr2[j])}console.log(clone)

慕妹3146593

这应该做到var arr= ["a", "b", "d"]var arr2=[{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}]const filteredArray = arr2.filter(obj => {&nbsp; return arr.includes(obj.id)})

哔哔one

如果 arr 项目总是字符串,你可以这样做:var arr = ["a", "b", "d"];var arr2 = [{id:"a", value:1},{id:"b", value:2}, {id:"c", value:3}];let str = arr.join('')let filtered = arr2.filter(x => str.includes(x.id));console.log(filtered)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript