假设有以下数据结构:
const data = [
{ id: 1, name: 'Obj 1', details: [{ id: 100, name: 'Detail 1 of Obj 1' }, { id: 101, name: 'Detail 2 of Obj 1' }] },
{ id: 2, name: 'Obj 2', details: [{ id: 102, name: 'Detail 1 of Obj 2' }, { id: 103, name: 'Detail 2 of Obj 2' }] },
{ id: 3, name: 'Obj 3', details: [{ id: 104, name: 'Detail 1 of Obj 3' }, { id: 105, name: 'Detail 2 of Obj 3' }] },
];
// 定义一个包含匹配项的数组
const selectedDetailsIds = [100, 103, 105];
我们需要遍历data中的每个对象及其嵌套的details数组,以找出包含selectedDetailsIds中所有匹配项的对象。
一种解决方法是逐个遍历对象并使用Array.every方法检查每个对象的details是否包含selectedDetailsIds中的所有匹配项。如果是,则将该对象添加到匹配的结果数组中。这可以通过以下代码实现:
const filteredData = data.filter((obj) => {
const found = selectedDetailsIds.every((selectedId) => {
return obj.details.find((detail) => {
return detail.id === selectedId;
});
});
return found;
});
console.log(filteredData); // [{ id: 1, name: 'Obj 1', details: [{ id: 100, name: 'Detail 1 of Obj 1' }, { id: 101, name: 'Detail 2 of Obj 1' }] }, { id: 2, name: 'Obj 2', details: [{ id: 102, name: 'Detail 1 of Obj 2' }, { id: 103, name: 'Detail 2 of Obj