为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2023-06-09 10:58:34
我正在尝试过滤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}]提前致谢 :)
查看完整描述

4 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

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)


查看完整回答
反对 回复 2023-06-09
?
Helenr

TA贡献1780条经验 获得超3个赞

使用 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++){

    for(let j = 0;j < arr.length; j++) if(arr2[i].id === arr[j]) clone.push(arr2[j])

}

console.log(clone)


查看完整回答
反对 回复 2023-06-09
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

这应该做到


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

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


const filteredArray = arr2.filter(obj => {

  return arr.includes(obj.id)

})


查看完整回答
反对 回复 2023-06-09
?
哔哔one

TA贡献1854条经验 获得超8个赞

如果 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)


查看完整回答
反对 回复 2023-06-09
  • 4 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信