对于树形结构,查找后代是否有符合条件的值,返回树形结构

79 阅读1分钟
    const findList = (data, value) => {
        let result = [];

        for (let i in data) {
            let now = JSON.parse(JSON.stringify(data[i]));

            // 判断自己是否符合条件,
            if (now.name.indexOf(value) >= 0) result.push(now);
            delete now.children;
            
            if (data[i]['children']) {

                // 递归查询子
                let recursion = findList(data[i]['children'], value);
                if (recursion.length > 0) {
                    // 如果子代有符合条件的,就把子挂到父亲的 children字段上
                    now.children = recursion;
                    let f = result.find(item => item.uuid === now.uuid);
                    if (!f) result.push(now);
                }
            }
        }

        return result;
    }

    let data = [
        {
            name: '1',
            uuid: '1',
            children: [
                {
                    name: '2',
                    uuid: '2',
                    children: [
                        {
                            name: '3',
                            uuid: '3',
                            children: [
                                {
                                    name: '9',
                                    uuid: '9'
                                }
                            ]
                        },
                        {
                            name: '4',
                            uuid: '4'
                        }
                    ]
                }
            ]
        },
        {
            name: 'a',
            uuid: 'a',
            children: [
                {
                    name: 'b',
                    uuid: 'b',
                    children: [
                        {
                            name: 'z',
                            uuid: 'z'
                        }
                    ]
                },
                {
                    name: 'b1',
                    uuid: 'b1',
                    children: [
                        {
                            name: 'b3',
                            uuid: 'b3'
                        }
                    ]
                }
            ]
        }

    ]

    let r = findList(data, '9')

    console.log(r)