【发布时间】:2014-11-27 06:28:08
【问题描述】:
我正在尝试在 JavaScript 中使用递归来深入遍历对象并返回其键和值。
这方面的一个例子是:
var json2 = {
'key1': {
'key2Nested': {
'key3Nested': {
'key4Nested': 'SomeValue'
},
'key5Nested': 'unimportantValue',
'key6Nested': 'SimpleValue'
},
'key7Nested': '2SimpleValue',
'key8Nested': 'unimportantValue2'
}
};
该函数将接受上述输入并返回类似
['key1/key2Nested/key3Nested/key4Nested', 'SomeValue'],
['key1/key2Nested/key5Nested', 'unimportantValue'],
等所有值。 问题是我尝试在所有对象的键上使用 for 循环,并尝试在循环内使用递归。但递归值返回一个数组,结束for循环。
这是我目前的代码:
var makeArray = function(obj) {
var keysArray = Object.keys(obj);
var returnArray = [];
for (var i = 0; i < keysArray.length; i++) {
var key = keysArray[i];
var next_results;
var path, value;
if (typeof(value) != 'object' ) {
value = obj[key];
returnArray = orderedArray.concat([key, value]);
} else if (typeof(value) == "object") {
next_results = makeArray(obj[key]);
if (next_results) {
for (var j = 0; j < next_results.length; j++) {
next_results[j][1] = '/' + key + next_results[j][1];
returnArray = returnArray.concat(next_results[j]);
}
}
}
console.log(returnArray);
return returnArray;
}
}
该函数需要保存从更深的递归级别返回的键,以便将其连接到路径。
也许我的算法可以以某种方式改进,或者我想错了。谁能给点建议?谢谢!
【问题讨论】:
标签: javascript arrays for-loop recursion