蔚来 - 前端日常一面

贡献一篇 经典的树形类题目 - 搜索树状关键词

好久前面蔚来 还是了理想时出的

// 实现一个函数search可以进行关键词搜索,返回出关键词出现的链路
// 比如 search('西半') 返回 ['北京市', '朝阳区', '西半街道']
// 比如 search('朝阳区') 返回 ['北京市', '朝阳区']
// 比如 search('街道') 返回 ['北京市', '昌平区', '昌平街道']、 ['北京市', '朝阳区', '西半街道']
let testObj = {
    babel: '北京市',
    child: [
        {
            babel: '朝阳区',
            child: [
                {
                    babel: '西半街道',
                },
                {
                    babel: '向上向善',
                }
            ]
        },
        {
            babel: '昌平区',
            child: [
                {
                    babel: '香水百合',
                },
                {
                    babel: '昌平街道',
                }
            ]
        }
    ]
}

自己写的复盘 -

let testObj = {
    babel: '北京市',
    child: [
        {
            babel: '朝阳区',
            child: [
                {
                    babel: '西半街道',
                },
                {
                    babel: '向上向善',
                }
            ]
        },
        {
            babel: '昌平区',
            child: [
                {
                    babel: '北香水百合',
                },
                {
                    babel: '昌平街道',
                }
            ]
        }
    ]
};

function search(keyword, node = testObj, path = []) {
    const newPath = [...path, node.babel];
    let results = [];

    if (node.babel.includes(keyword)) {//includes就可以部分匹配(当时不会部分匹配)
        results.push(newPath);
    }

    if (node.child) {
        for (const child of node.child) {
            results = results.concat(search(keyword, child, newPath));  // 合并数据
        }
    }

    return results;
}
// 测试示例
console.log(search('西半'));  // [ [ '北京市', '朝阳区', '西半街道' ] ]
console.log(search('朝阳区'));  // [ [ '北京市', '朝阳区' ] ]
console.log(search('街道'));  // [ [ '北京市', '朝阳区', '西半街道' ], [ '北京市', '昌平区', '昌平街道' ] ]
console.log(search('北'));  // [ [ '北京市' ], [ '北京市', '昌平区', '北香水百合' ] ]

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务