我有一个可以解析的JSON。我正在尝试在这里使用递归方法。当前的JSON具有类似于底部的结构
Item 01
SubItem 01
InnerSubItem 01
Item 02
SubItem 01
InnerSubItem 01
使用我创建的函数,我只能解析第一组(项目01下的内容)。当条件为false
时,代码不会返回循环使用的代码
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {
repeat(data, data.layers);
})
function repeat(data, x) {
var layer = data.layers.reverse()
for (i = 0; i < x.length; i++) {
name = x[i].name
console.log(name)
if (x[i].layers.length > 0) {
repeat(data, x[i].layers)
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
当对象没有layers
属性时,您的代码会断开。您应该在检查length
之前检查其存在。
,例如
if (x[i].layers && x[i].layers.length > 0)
修复代码:
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {
repeat(data, data.layers);
})
function repeat(data, x) {
var layer = data.layers.reverse();
for (var i = 0; i < x.length; i++) {
name = x[i].name;
console.log(name);
if (x[i].layers && x[i].layers.length > 0) {
repeat(data, x[i].layers);
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
在旁注上,您似乎不会使用反向数组,并且每次调用repeat
时都会不必要地传递data
。您可能会写这样的东西(如果需要的话,请反转数组):
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {
repeat(data);
})
function repeat(data) {
if (!data || !data.layers)
return;
var x = data.layers;
for (var i = 0; i < x.length; i++) {
name = x[i].name;
console.log(name);
repeat(x[i]);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>