我一直在努力寻找/构建一个递归函数来解析此JSON文件并获取其子级的总深度。
该文件如下所示:
var input = { "name": "positive", "children": [{ "name": "product service", "children": [{ "name": "price", "children": [{ "name": "cost", "size": 8 }] }, { "name": "quality", "children": [{ "name": "messaging", "size": 4 }] }] }, { "name": "customer service", "children": [{ "name": "Personnel", "children": [{ "name": "CEO", "size": 7 }] }] }, { "name": "product", "children": [{ "name": "Apple", "children": [{ "name": "iPhone 4", "size": 10 }] }] }] }
您可以使用递归函数遍历整个树:
getDepth = function (obj) { var depth = 0; if (obj.children) { obj.children.forEach(function (d) { var tmpDepth = getDepth(d) if (tmpDepth > depth) { depth = tmpDepth } }) } return 1 + depth }
该函数的工作原理如下:
jsFiddle:http : //jsfiddle.net/chrisJamesC/hFTN8/
编辑 使用现代JavaScript,该函数可能如下所示:
const getDepth = ({ children }) => 1 + (children ? Math.max(...children.map(getDepth)) : 0)
jsFiddle:http : //jsfiddle.net/chrisJamesC/hFTN8/59/