我有一个基本的递归函数,应该将在每个数组/对象中找到的每个值推入结果数组:
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, []));