js如何获取tree型数组中当前项的最大深度呢?

const treeData = [
{key: 'tree1',children: [{key: 'tree2',children: [{key: 'tree3',children: [{key: 'tree4'}
]
}
]
},
{key: 'tree5'}
]
},
{key: 'tree6'},
{key: 'tree7'}
]

想获得的结果

console.log(getMaxDepthByKey('tree1',treeData)) 结果为3console.log(getMaxDepthByKey('tree2',treeData)) 结果为2console.log(getMaxDepthByKey('tree3',treeData)) 结果为1console.log(getMaxDepthByKey('tree4',treeData)) 结果为0console.log(getMaxDepthByKey('tree5',treeData)) 结果为0console.log(getMaxDepthByKey('tree6',treeData)) 结果为0console.log(getMaxDepthByKey('tree7',treeData)) 结果为0

回答

经典的深度优先搜索,只有一个数据么,如果是的话,可以预处理下:

let ans = {}function getMaxDepthByKey(treeData) { for (let item of treeData) {
getDepth(item)
} function getDepth(obj) { if (obj.hasOwnProperty('children')) {
ans[obj.key] = 0
for (let item of obj.children)
ans[obj.key] = Math.max(ans[obj.key], getDepth(item) + 1)
return ans[obj.key]
} else {
ans[obj.key] = 0
return 0
}
}
}

getMaxDepthByKey(treeData)console.log(ans['tree1']) // 3console.log(ans['tree2']) // 2console.log(ans['tree3']) // 1console.log(ans['tree4']) // 0console.log(ans['tree5']) // 0console.log(ans['tree6']) // 0console.log(ans['tree7']) // 0

但是题主对调用方式做了固定,稍微改下即可

参照楼上的修改了一下,嘻嘻

var deep = 0;function getMaxDepthByKey(str, data) { for (var i = 0; i < data.length; ++i) { if (str === data[i].key) {
deep = getDeep(data[i]); break;
} else { if (data[i].hasOwnProperty('children')) {
getMaxDepthByKey(str, data[i].children);
}
}
} return deep;
}var maxLen = [];function getDeep(data) { if (data.hasOwnProperty('children')) {
maxLen[data.key] = 0; for (let item of data.children)
maxLen[data.key] = Math.max(maxLen[data.key], getDeep(item) + 1); return maxLen[data.key];
} else { return 0;
}
}console.log(getMaxDepthByKey('tree1', treeData));//3console.log(getMaxDepthByKey('tree2', treeData));//2console.log(getMaxDepthByKey('tree3', treeData));//1console.log(getMaxDepthByKey('tree4', treeData));//0console.log(getMaxDepthByKey('tree5', treeData));//0console.log(getMaxDepthByKey('tree6', treeData));//0console.log(getMaxDepthByKey('tree7', treeData));//0

手机不太方便大概是这么想的根据QQ靓号拍卖地图树做数组,然后再算

t1
t2
t3
t4
t5
t6
t7


[
[t1 t2 t3 t4]
[t1 t5]
[t6]
[t7]
]

更改结构后应该说从思路上会清晰,但速度可能不快

// 我再改改


更多相关文章

  1. 第十二课 数组循环
  2. 深度好文:Kimball维度建模
  3. 0805作业 找出数组偶数 和 计算器
  4. 作业内容:oop基础:请举例实例演绎以下难点 1. 类(对象抽象化的结
  5. ThinkPHP5 微信接口对接公共类
  6. JS异步编程模型
  7. mysql当查询某字段结果为空并赋值
  8. 【点宽专栏】基于深度学习的股票涨跌预测
  9. Flash闪存颗粒和SSD知识深度解析

随机推荐

  1. Android Material Design: NavigationVie
  2. Android jni的调用过程JNI_OnLoad(),利用
  3. 修改Android自带的JAVA应用程序
  4. 【Android 开发】:Android五种布局的使用
  5. 最近在翻译国外一本新书 The Android Dev
  6. Android事务 IMMEDIATE与EXCLUSIVE模式
  7. Android消息提示框和对话框
  8. android 在google商店里搜索不到的问题
  9. Android GirdView
  10. Android 4编程入门经典