deepFilter
对树结构数据进行过滤,返回符合条件节点及其祖先的新树结构。若节点满足回调或存在符合条件的子节点,则保留该节点。
配置项
| 参数 | 类型 | 是否必选 | 默认值 | 参数描述 |
|---|---|---|---|---|
| list | Array | 是 | - | 源数组,树结构数据 |
| callback | Function | 是 | - | 过滤回调函数,参数为节点数据,返回Boolean表示是否保留 |
返回值
| 类型 | 描述 |
|---|---|
| Array | 过滤后的新树结构数组 |
示例
// 待补充源码
js
export function deepFilter(list, callback) {
// 参数校验
if (!Array.isArray(list)) {
throw new TypeError('first param expected an array');
}
if (typeof callback !== 'function') {
throw new TypeError('last param expected a function');
}
// 深拷贝原数据以避免副作用
const clonedList = JSON.parse(JSON.stringify(list));
return clonedList.filter(item => {
// 递归处理子节点
if (item.children && Array.isArray(item.children)) {
item.children = deepFilter(item.children, callback);
}
// 保留条件:当前节点符合回调或存在子节点
const hasValidChildren = item.children && item.children.length > 0;
return callback(item) || hasValidChildren;
});
}
@keyboarder-yang