mhahaha / js-snippets

Daily JS Snippets
0 stars 0 forks source link

手写一个tree过滤器 @method filterTree #3

Open mhahaha opened 5 years ago

mhahaha commented 5 years ago

现有如下结构的一个tree数组:

let tree = [
    {
        name: 'a',
        children: [
            {
                name: 'b'
            },
            {
                name: 'dd'
            }
        ]
    },
    {
        name: 'C',
        children: [
            {
                name: 'g',
                children: [
                    {
                        name: 'a'
                    },
                    {
                        name: 'c'
                    }
                ]
            }
        ]
    }
];

写一个函数,过滤出所有 name = 'a' 的分支。


/**
 * 过滤符合条件的树结构
 * 
 * @method filterTree
 * @param {Array} sourceTree 
 * 
 * @returns {Array}
 */
function filterTree (sourceTree) {

    if (!Array.isArray(sourceTree)) {
        return;
    }

    let filterRes = sourceTree.filter(item => {
        if (item.name === 'a') {
            return true;
        } else if (!item.children || !item.children.length) {
            return false;
        }

        item.children = filterTree(item.children);

        return item.children.length;
    });

    return filterRes;
}

let res = filterTree(tree);

console.log(res);

输出结果:

image

CrisChr commented 4 years ago

请问为什么filter最后要返回一个item.children.length?

mhahaha commented 3 years ago

请问为什么filter最后要返回一个item.children.length? 只需保留有效数据。