JavaScript 递归查询嵌套对象匹配键值路径 如何返回数组而非拼接字符串
解决方案
将原逻辑中字符串拼接的部分改为数组拼接即可,修改后的完整代码如下:
const data = [ { parentId: "1111", name: "Audi", children : [ { parentId: "2222", name: "Benz", children : [ { parentId: "3333", name: "VW", children : [ ] } ] } ] } ] const pathTo = (array, target) => { let result; array.some(({ parentId, name, children = [] }) => { if (parentId === target) { // 匹配到目标节点,初始化单元素数组 result = [JSON.stringify({ parentId, name })]; return true; } const temp = pathTo(children, target); if (temp) { // 子节点匹配到路径,把当前节点插入数组头部 result = [JSON.stringify({ parentId, name }), ...temp]; return true; } }); return result; }; console.log(pathTo(data, "3333"))
运行输出结果:
[ '{"parentId":"1111","name":"Audi"}', '{"parentId":"2222","name":"Benz"}', '{"parentId":"3333","name":"VW"}' ]
逻辑说明
- 匹配到目标节点时,直接返回仅包含当前节点序列化结果的数组
- 子节点递归返回有效路径时,将当前节点的序列化结果插入数组开头,即可保证路径顺序是从根节点到目标节点
- 不需要序列化存储的话,直接删除
JSON.stringify调用,就能直接返回节点对象组成的路径数组。
内容的提问来源于stack exchange,提问作者employee
相关产品推荐
相关产品推荐

