当前位置: 首页 > 面试题库 >

如何获取未知JSON层次结构的总深度?

段干英杰
2023-03-14
问题内容

我一直在努力寻找/构建一个递归函数来解析此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
}

该函数的工作原理如下:

  • 如果对象不是叶子(即对象具有children属性),则:
    • 计算每个孩子的深度,保存最大的一个
    • 返回1 +最深的孩子的深度
  • 否则,返回1

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/



 类似资料:
  • 如果我有这样一门课: 获取节点的所有父层次结构的最简单/最优雅的方法是什么? 类似于:

  • 问题内容: 我有课: 然后创建对象: 尝试获取所有字段后,我打电话 但是我只有一个数组 如何从所有类的所有字段包括扩展? 问题答案: 请尝试以下操作:

  • 问题内容: 我正在尝试查找指定目录下的所有文件和文件夹 例如我有/ home / user / stuff 我想回来 希望这是有道理的! 问题答案:

  • 我想得到一个表示 json 的字符串,如下所示: 并在其中包含一个“count”键,因此结尾如下: 这就是为什么我计划将其转换为 json,以便我可以添加计数,然后再次使其成为字符串。问题是我不知道该 JSON 的结构,所以我无法使用

  • 问题内容: 我在 .NET for WinRT(C#)中 ,我想将JSON字符串反序列化为,然后将字典值稍后转换为实际类型。JSON字符串可以包含对象层次结构,我也希望在其中包含子对象。 这是应该能够处理的示例JSON: 我尝试使用 DataContractJsonSerializer 这样做: 实际上,这对于第一个级别是可行的,但是 “父母” 只是一个不能强制转换为的对象: 然后,我尝试使用 J

  • 问题内容: 在“深度”对象层次结构中使用Builder模式的最佳实践是什么?详细地说,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但是这个问题将适用于任何情况)。我的对象层次结构深达4个级别,具有不同程度的复杂性。我的意思是,在某些级别上,我的对象只有几个属性,而在其他级别上,我最多可以有10个属性。 因此,请考虑以下假设