栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript中嵌套对象结构中的递归树搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript中嵌套对象结构中的递归树搜索

您的代码只是缺少一个循环来检查

child
数组中节点的每个子节点。此递归函数将返回
label
节点的属性,或者
undefined
如果树中不存在标签,则返回该属性:

const search = (tree, target) => {  if (tree.id === target) {    return tree.label;  }  for (const child of tree.child) {    const res = search(child, target);    if (res) {      return res;    }  }};var tree = {"id":1,"label":"A","child":[{"id":2,"label":"B","child":[{"id":5,"label":"E","child":[]},{"id":6,"label":"F","child":[]},{"id":7,"label":"G","child":[]}]},{"id":3,"label":"C","child":[]},{"id":4,"label":"D","child":[{"id":8,"label":"H","child":[]},{"id":9,"label":"I","child":[]}]}]};console.log(search(tree, 1));console.log(search(tree, 6));console.log(search(tree, 99));

您还可以使用显式堆栈进行迭代,该堆栈更快,更凉爽并且不会导致堆栈溢出:

const search = (tree, target) => {  const stack = [tree];  while (stack.length) {    const curr = stack.pop();    if (curr.id === target) {      return curr.label;    }    stack.push(...curr.child);  }};var tree = {"id":1,"label":"A","child":[{"id":2,"label":"B","child":[{"id":5,"label":"E","child":[]},{"id":6,"label":"F","child":[]},{"id":7,"label":"G","child":[]}]},{"id":3,"label":"C","child":[]},{"id":4,"label":"D","child":[{"id":8,"label":"H","child":[]},{"id":9,"label":"I","child":[]}]}]};for (let i = 0; ++i < 12; console.log(search(tree, i)));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号