4 回答

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)

TA贡献1780条经验 获得超4个赞
使用 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)

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

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)
添加回答
举报