蔚来 - 前端日常一面

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

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

// 实现一个函数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('北'));  // [ [ '北京市' ], [ '北京市', '昌平区', '北香水百合' ] ]

全部评论
和我的题一模一样
点赞 回复 分享
发布于 08-17 01:00 北京

相关推荐

09-10 16:27
已编辑
西安电子科技大学 Web前端
9-4 一面(35min)1. 简单介绍了一下项目。2. webgl、three.js、canvas 的关系是什么?3. 你们的建模是自己怎么处理的,自己建模时有没有接触过模型动画?4. meshopt 会有编码解码的时间吗5. 在三维开发有没有遇到内存泄漏的问题,怎么排查和解决的?6. 有没有写过 shader7. TCP 与 UDP 的区别?8. TCP 是如何保证可靠传输的?9. 介绍一下 http2.0 与 http3.0?10. vue2 与 vue3 的区别?11. react 与 vue 的区别?12. 了解 SSR 吗 与 CSR 的区别?服务端返回 html ,客户端做了什么?13. 平常打包工具用的哪些?举例子讲一讲 webpack 的 treeshaking?14. 有没有了解大模型相关知识?15. 算法题?9- 9 二面(50min)1. 拷打项目。2. 团队内编码习惯不一样,如何共同维护一个项目。3. 除了利用 eslint 设置规范,在项目中有一些语法不允许使用,如何在提交过程中扫描出来,提示给开发者。4. 如何使用 webpack loader 进行实现上述功能。5. 如何区分是写了字符串还是黑名单中的语法呢?6. webpack loader 与 plugin 的区别?7. webpack 与 vite 的区别?8. react  与 Vue 的区别?9. vue 的响应式原理。10. 大型项目上线之后出现性能太慢的问题,怎么解决(从哪些维度量化性能问题)11. MongoDB与MYSQL的区别12. 购物车中的数据缓存选择什么技术方案13. 手撕 promiseAll
查看50道真题和解析
点赞 评论 收藏
分享
09-19 19:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
6
5
分享

创作者周榜

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