我有以下嵌套的json列表。 我实现了loopJson,但它不是递归的,并且它没有传递第一个对象列表。如果有人可以建议应该进行递归调用的位置以便执行递归,那将会很棒。
{
"key": "math",
"right": {
"key": "Math"
},
"left": {
"key": "A Greek–English Lexicon",
"right": {
"key": "A-list"
},
"left": {
"key": "ASCII"
}
}
}
var loopJson = function(json){
if(json.left.key != null){
that.arrayTest.push({key:json.key,left:json.left.key});
}
if(json.right.key != null){
that.arrayTest.push({key:json.key,right:json.right.key});
}
}
目标: 遍历每个对象并创建一个对象数组,包括带有键的对象("键","右")或("键","左&#34)。由于当前json是嵌套的,我想将json拆分为一个对象数组。但是,它不是遍历每个对象,因为它不是递归的。我必须找到一种让它递归的方法。
预期输出的一个例子:
[{key:"math",right:"Math"},{key:"math",left: "A Greek–English Lexicon"},{key: "A Greek–English Lexicon",left:""ASCII},{key: "A Greek–English Lexicon",right:"A-list"}]
答案 0 :(得分:1)
var input = {
"key": "math",
"right": {
"key": "Math"
},
"left": {
"key": "A Greek–English Lexicon",
"right": {
"key": "A-list"
},
"left": {
"key": "ASCII"
}
}
};
var nestedMethod = function(input) {
var output = [];
if (input.right) {
output.push({ key: input.key, right: input.right.key });
output = output.concat(nestedMethod(input.right));
}
if (input.left) {
output.push({ key: input.key, left: input.left.key });
output = output.concat(nestedMethod(input.left));
}
return output;
}
document.write(JSON.stringify(nestedMethod(input)));

答案 1 :(得分:1)
这是一个具有递归函数和固定属性数组的提案,以便照顾。
var object = {
"key": "math",
"right": {
"key": "Math"
},
"left": {
"key": "A Greek–English Lexicon",
"right": {
"key": "A-list"
},
"left": {
"key": "ASCII"
}
}
},
array = [];
function getParts(object, array) {
['right', 'left'].forEach(function (k) {
var o;
if (object[k]) {
o = { key: object.key };
o[k] = object[k].key;
array.push(o);
getParts(object[k], array);
}
});
}
getParts(object, array);
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');