从对象数组中根据某一个字段进行筛选数据

JS 中数组者对象中,根据另外一个数组中的数据进行筛选数据.例如如下场景:

有两个数组对象,一个数组对象中的值是另外一个数组对象中的某个字段的值的集合,我们需要筛选出集合字段的 item 对象的集合

1
2
3
4
5
6
7
8
const arr1 = [
{ name: "a", id: 1 },
{ name: "b", id: 2 },
{ name: "c", id: 3 },
];
const arr2 = [1, 3];

// 筛选出arr1中id 为arr2中值的集合

方法 1:

1
2
3
4
5
6
7
8
9
let _res = [];
arr2.forEach((field) => {
arr1.forEach((item) => {
if (item.id == field) {
_res.push(item);
}
});
});
return _res;

方法 2:

1
2
let res = arr1.filter(({ id }) => arr2.find((e) => e == id));
console.log("res", res);

验证结果

也可以简单的封装成一个函数,传入数组 arr1,和 arr2,然后筛选出符合条件的结果.

1
2
3
4
5
6
7
8
9
10
11
const objfilterByfield = (arr1, arr2) => {
return arr1.filter(({ id }) => arr2.find((e) => e === id));
};

const arr1 = [
{ name: "a", id: 1 },
{ name: "b", id: 2 },
{ name: "c", id: 3 },
];
const arr2 = [1, 3];
console.log(objfilterByfield(arr1, arr2));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const objfilterByfield = (arr1, arr2) => {
let _res = [];
arr2.forEach((field) => {
arr1.forEach((item) => {
if (item.id == field) {
_res.push(item);
}
});
});
return _res;
};
const arr1 = [
{ name: "a", id: 1 },
{ name: "b", id: 2 },
{ name: "c", id: 3 },
];
const arr2 = [1, 3];
console.log(objfilterByfield(arr1, arr2));