javascript - 如何将循环中的本地数组连接到循环外的本地数组?

标签 javascript function loops recursion

我有一个基本的递归函数,该函数应该将每个数组/对象中找到的每个值推送到结果数组中:

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/

相关文章:

c# - 计算值在数组中出现的次数

php - 在 href 上添加和删除 css 类

javascript - ng-click 不适用于 li

javascript - Javascript 中的 while 与 setTimeout

c++ - 将对象成员数组与字符串进行比较

python,如何在范围循环中跳过行

c# - C# 中的 ForEach 循环问题

javascript - 从加载的输入字段替换美元符号

javascript - 操作JS Date内部时间

javascript - 单击另一个 div 时将事件类添加到第一个 div