我有一个基本的递归函数,该函数应该将每个数组/对象中找到的每个值推送到结果数组中:
var bigArray = ['a', ['howdy', 'partner'], ['b', ['c', ['d', {a:'e', b:['yes', 'no', {apple: 'orange'}]}]]]];
function bagger293(bigArray){
var results = [];
for (var item in bigArray){
if (typeof bigArray[item] === 'object'){
bagger293(bigArray[item]);
}else{
results.push(bigArray[item]);
}
}
return results;
}
console.log(bagger293(bigArray));
期望:[ 'a', 'howdy', 'partner', 'b', 'c', 'd', 'e', 'yes', 'no', 'orange' ]
但是自从 var results = [];
在函数内部,每次发生递归时,调用该函数时,结果数组都会更改,而不是添加到每个循环中。我知道我需要连接,但我不知道如何连接。我试过results.concat(results.push(bigArray[item]);
但这只返回 ['a']
如果我搬家var results = [];
对于全局范围,一切都可以完美运行,不需要 concat,但我想在本地范围内实现这一点。有什么想法吗?
最佳答案
最简单的事情是将结果数组与函数一起传递:
function bagger293(bigArray, results) {
for (var item in bigArray){
if (typeof bigArray[item] === 'object') {
results = bagger293(bigArray[item], results);
} else {
results.push(bigArray[item]);
}
}
return results;
}
console.log(bagger293(bigArray, []));
关于javascript - 如何将循环中的本地数组连接到循环外的本地数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243725/