js用filter实现递归
时间: 2024-09-12 20:01:50 浏览: 12
在JavaScript中,如果你想用`filter()`方法实现递归,通常是在处理数组嵌套的情况下,比如需要筛选出某个属性值满足条件的对象。例如,假设有一个嵌套的数组结构,我们想要找出所有深度大于等于2的对象,并且这些对象的某个字段(如`type`)符合特定条件。下面是一个简单的例子:
```javascript
function recursiveFilter(arr, callback, depth = 0) {
return arr.filter(item => {
if (typeof item === 'object' && !Array.isArray(item) && depth > 0) {
// 检查当前元素是否是个对象且已达到指定深度
if (callback(item, depth)) {
// 如果回调函数返回true,则保留该元素
return true;
} else {
// 否则递归地对对象的属性进行过滤
for (let key in item) {
if (recursiveFilter(item[key], callback, depth - 1).length > 0) {
// 如果属性中有符合条件的元素,则返回true
return true;
}
}
}
} else {
// 如果不是对象或未达到深度,直接判断是否符合条件
return callback(item, depth);
}
});
}
// 示例数据
const nestedArray = [
{ type: 'A', items: [{ type: 'B', children: [{ type: 'D' }] }] },
{ type: 'E' },
{ type: 'F', items: [{ type: 'G', children: [] }] }
];
// 使用递归过滤,只保留type为'D'的对象
const filteredArray = recursiveFilter(nestedArray, item => item.type === 'D', 2);
console.log(filteredArray); // 输出:[ { type: 'D' } ]
```
在这个例子中,`callback`是你自定义的测试函数,用于判断每个节点是否符合需求;`depth`则是当前处理的层级。