蔚来 - 前端日常一面

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

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

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

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

相关推荐

2025-12-29 22:13
河北工程大学 Java
嵌入式的小白:不同方向的技术都是下功夫的,只是对没经验的人来说,不同的方向好多人不知道需要什么技能,有时候会做一些不相关的准备,所以还有要先了解不同方,实习就是个很好的了解方向,多实习几个方向的,然后就知道走哪个方向,该怎么准备了
现在前端的就业环境真的很...
点赞 评论 收藏
分享
快手效率还是很高啊 刚放假结束立马约面了面经如下:1. 自我介绍一下 (依旧背板子)2. 你是怎么看待前端这个方向的 以后想做点什么方向(简单聊了聊)3. 有实践过一些全栈开发吗(聊到之前参加比赛做过一些简单的后台)4. 简历上说了熟悉vite和webpack讲讲 他们有什么区别5. 看你用pnpm搭建了monorepo架构 那你还了解过其他可以搭建monorepo的工具吗? 了解他的底层原理吗(讲了讲其他的包管理工具和lua 底层原理优点瞎扯了)6. 你的项目是在哪做的? 是个人开发的吗 更偏向于哪个方向(tob/toc)?7. 问了一些项目细节和具体实现8. 虚拟列表是怎么作监听的(没听懂 答了监听scroll事件和怎么实现的 于是又一连串追问 滚动底部为什么会出现为渲染的情况? 有没有办法优化监听的方法 requestanimationFrame用来干嘛的 为什么计算渲染列表不用observer实现 有了解过observer吗? 在其他组件中有做过observer吗)9. 又问了其他的细节 一个表单是怎么保存用户信息的 怎么实现的表单组件10. 讲讲上传组件是怎么实现的(问的时候忘记了 瞎答)11. 大文件上传? 为什么用webworker? 多大的文件算是大文件(这个真不知道 答了一个看网络情况...后面查了发现是有具体定义的 男泵)12. 讲讲unplugin-vue-router unplugin-auto-import...这几个插件有啥用? 为啥用?13. 讲讲浏览器的事件循环 能举一些实际的例子吗 哪些api是宏任务哪些是微任务 (有点忘了 就答了promise和setTimeout 但面试官人很好  问了几个让我判断是不是宏任务微任务 都答上了) 出了一个关于事件循环的输出题14. 讲讲用户输入网页url后经历了那些过程才看到最终页面?(DNS+浏览器渲染过程 说得非常烂 只能说大概说到)15. spa下用户执行操作更新页面之后是前端进行更新还是后端?(有点没懂 讲了不同场景 开发环境、生产环境、ssr)16. 了解过ssr吗?反问问了面试评价、之后应该往那方面学习 之后公司的业务 有没有培养结果面试完一个小时就越hr面了X﹏X 无敌了X﹏X
查看16道真题和解析
点赞 评论 收藏
分享
评论
6
8
分享

创作者周榜

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