要按照每个层级的单独标准查找嵌套对象数组的匹配项,你可以使用递归函数来遍历嵌套的对象数组,并根据每个层级的标准进行匹配。下面是一个示例代码:
function findMatchingItems(objArray, criteria) {
let matchingItems = [];
function searchNestedArray(objArray, criteria, level) {
for (let obj of objArray) {
let isMatch = true;
// 检查每个层级的标准是否匹配
for (let key in criteria[level]) {
if (obj[key] !== criteria[level][key]) {
isMatch = false;
break;
}
}
if (isMatch) {
// 如果是最后一层级,则将匹配项添加到结果数组
if (level === criteria.length - 1) {
matchingItems.push(obj);
} else {
// 否则继续递归查找下一层级
searchNestedArray(obj.children, criteria, level + 1);
}
}
}
}
searchNestedArray(objArray, criteria, 0);
return matchingItems;
}
// 示例用法
let objArray = [
{
id: 1,
name: 'A',
children: [
{
id: 2,
name: 'B',
children: [
{
id: 3,
name: 'C',
children: []
}
]
}
]
},
{
id: 4,
name: 'D',
children: []
}
];
let criteria = [
{ name: 'A' },
{ name: 'B' },
{ name: 'C' }
];
let matchingItems = findMatchingItems(objArray, criteria);
console.log(matchingItems); // 输出: [{ id: 3, name: 'C', children: [] }]
在上面的示例中,findMatchingItems
函数接受两个参数:objArray
是嵌套的对象数组,criteria
是一个数组,每个元素表示每个层级的匹配标准。函数内部使用 searchNestedArray
递归函数来遍历嵌套的对象数组,并根据每个层级的标准进行匹配。如果匹配成功,则继续递归查找下一层级,直到匹配到最后一层级。如果是最后一层级,则将匹配项添加到结果数组 matchingItems
中。
在上面的示例中,通过给定的 objArray
和 criteria
,我们可以找到符合条件的项 { id: 3, name: 'C', children: [] }
。