【发布时间】:2018-02-02 02:34:53
【问题描述】:
我有一个这样的嵌套位置的 JSON 结构:(注意,这是伪 json,不是实际的 json)
location : "Location Parent"
locationid : 100
parent_location_id: ''
SUBLOCATIONS : Array(2)
location : "Location Child"
locationid : 200
parent_location_id: 100
location : "Location Child Two"
locationid : 300
parent_location_id: 100
location : "Location Parent Two"
locationid : 101
parent_location_id: ''
SUBLOCATIONS : Array(2)
location : "Location Child"
locationid : 201
parent_location_id: 101
location : "Location Child Two"
locationid : 301
parent_location_id: 101
SUBLOCATIONS : Array(2)
location : "Location Sub Child"
locationid : 401
parent_location_id: 301
location : "Location Sub Child Two"
locationid : 501
parent_location_id: 301
我希望能够通过这些数据进行递归,并为每个项目添加一个属性,以表示其在层次结构中的位置或深度,所以最后,我会有这样的东西:
location : "Location Parent"
locationid : 100
parent_location_id : ''
level: 1
SUBLOCATIONS : Array(2)
location : "Location Child"
locationid : 200
parent_location_id : 100
level: 2
location : "Location Child Two"
locationid : 300
parent_location_id : 100
level: 2
location : "Location Parent Two"
locationid : 101
parent_location_id : ''
level: 1
SUBLOCATIONS : Array(2)
location : "Location Child"
locationid : 201
parent_location_id : 101
level: 2
location : "Location Child Two"
locationid : 301
parent_location_id : 101
level: 2
SUBLOCATIONS : Array(2)
location : "Location Sub Child"
locationid : 401
parent_location_id: 301
level: 3
location : "Location Sub Child Two"
locationid : 501
parent_location_id: 301
level: 3
我可以通过这样的结构递归:
recursivelyTraverseLocations(locations) {
for (let location of locations) {
if (location.parent_location_id > 0) {
location.level = _depth_
} else {
location.level = 1
}
if (location.SUBLOCATIONS) {
this.recursivelyTraverseLocations(location.SUBLOCATIONS);
}
}
}
但我不知道如何初始化和限定 depth 变量以计算它在递归中的深度,并在它到达底部并从顶部开始时重置一个新的分支。
【问题讨论】:
-
以
1开头,作为参数传递给递归方法 -
那不是JSON。 “JSON 是一种文本、语言无关的数据交换格式,很像 XML、CSV 或 YAML。” - What is the difference between JSON and Object Literal Notation?
-
@Andreas - 我从 JSON 格式的服务中获取数据,然后可能通过将其分配给一个变量,它就变成了一个简单的 JavaScript 对象,所以正确的标题应该是“添加深度或父计数”属性到嵌套的 JavaScript 对象结构'?我在顶部注意到我的示例是伪 json,但我不确定如何最准确地描述这一点。谢谢!
-
好吧,如果您从服务中获取 JSON 格式的数据,为什么不能将该 JSON 复制并粘贴到问题中?为什么让我们看伪代码?或者只是把花括号和方括号放在那里并称之为 JavaScript 对象?
-
无论如何,This question and its answers 应该可以帮助您找到答案。
标签: javascript json recursion