Skip to content

deepFilter

对树结构数据进行过滤,返回符合条件节点及其祖先的新树结构。若节点满足回调或存在符合条件的子节点,则保留该节点。

配置项

参数类型是否必选默认值参数描述
listArray-源数组,树结构数据
callbackFunction-过滤回调函数,参数为节点数据,返回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;
    });
}