我有一个函数,它应该遍历一个JSON文件,获取值并将它们推送到一个新数组。
我已在函数外声明了数组,如下所示:
var output = [];
function get_json(jsonObj) {
console.log("Out put => " + output);
for (var x in jsonObj) {
if (typeof (jsonObj[x]) == 'object') {
get_json(jsonObj[x]);
} else {
output.push({
key: x,
value: jsonObj[x]
});
//console.log(output);
}
}
return output;
}
调用上述函数并将其传递到json数据中,如下所示:
var result = get_json(jsonObj);
应该返回一个包含值,键和值的数组。但是,当我将数据推送到函数时,我得到输出变量未定义,因此它无法创建数组,从而导致失败。 我怎样才能声明数组?宣布它的最佳位置是什么?
答案 0 :(得分:4)
你正在尝试做一个递归函数。您可以在函数内部移动output
声明并在最后返回它,但不要忘记在每次迭代时填充它(即使用concat
和push
)。我更喜欢这个版本而不是全局变量,因为它更清晰,并且避免了你似乎有的冲突。
function get_json(jsonObj) {
var output = [];
for (var x in jsonObj) {
if (typeof(jsonObj[x]) === 'object') {
output = output.concat(get_json(jsonObj[x]));
} else {
output.push({
key: x,
value: jsonObj[x]
});
}
}
return output;
}
console.log(get_json({
person: {
name: 'John Doe',
age: 26,
stuff: [{
name: 'Big Sword'
},
{
name: 'Yoyo'
}
]
},
city: 'New York'
}));