树的查询(适用两层)

35 阅读1分钟
function isMZ(item: any, filterFun: (item: any) => boolean) {
    let mz = filterFun(item);
    if (!mz) {
        // 如果未命中
        // 此时为 group
        item.children.forEach(function (item: any) {
            mz = isMZ(item, filterFun);
        });
        item.isMZ = item.children.some((i: any) => i.isMZ);
        return item.isMZ;
    }

    item?.children?.forEach(function (item: any) {
        item.isMZ = mz;
    });
    item.isMZ = mz;
    return mz;
}


function queryTreeData(treeData: any[], filterFun: (item: any) => boolean) {
    const copyTreeData = deepCopy(treeData);
    copyTreeData.forEach(function (item) {
        isMZ(item, filterFun);
    });
    return filterSelectData(copyTreeData);
}
function filterSelectData(data: any[]): any[] {
    if (!data || data.length === 0) return data;
    return data.filter(function (item) {
        return item.isMZ;
    }).map(function (item: any) {
        return {
            ...item,
            children: filterSelectData(item.children)
        };
    });
}


function isMZ(item: any, filterFun: (item: any) => boolean) {
    let mz = filterFun(item);
    if (!mz) {
        // 如果未命中
        // 此时为 group
        item.children.forEach(function (item: any) {
            mz = isMZ(item, filterFun);
        });
        item.isMZ = item.children.some((i: any) => i.isMZ);
        return item.isMZ;
    }

    item?.children?.forEach(function (item: any) {
        item.isMZ = mz;
    });
    item.isMZ = mz;
    return mz;
}