javascript - 在 JavaScript 中不使用 .concat 或 .reduce 的嵌套数组的递归方法

标签 javascript recursion

我正在研究一种简单的递归方法来展平数组,但我不知道哪里出错了。我已经看到关于此的其他线程 ( How to flatten nested array in javascript? ) 但我正在尝试不使用 .concat 或 .reduce 来完成它。

这个一直在循环,但我不确定为什么 - 看起来它应该命中最嵌套的数组并返回其中的任何字符。

谢谢!

var ret= [];
var nested = [['a','b'],[],'c',['d','e']];
function flatten(arr) {
  for (i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      flatten(arr[i]);
    } else {
        ret.push(arr[i]);
    }
  }
}
flatten(nested);

最佳答案

您忘记将 i 声明为变量。它被视为全局变量。

for (var i = 0; i < arr.length; i++) {

如果您在每次迭代中输出 i 的值,您将看到无限循环问题,

0, 1, 3, 0, 1, 3, 0, 1, ...

关于javascript - 在 JavaScript 中不使用 .concat 或 .reduce 的嵌套数组的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44188530/

相关文章:

javascript - 无法使用 jquery.post 更改变量

javascript - 为什么 postMessage() 只给我最后一个 DOM 的信息?

javascript - 如何删除 react-native 项目中的 react-native-elements

postgresql - 非递归语句中的递归调用

c++ - 使用递归段错误核心转储对数组进行排序

templates - C++11 decltype 和模板循环中的无限递归

javascript - 为什么汉诺塔中的 'disc' 值在 'disc' 次调用中不会递减为 0?

javascript - 为不同语言编辑字体的方法——HTML、CSS、JQUERY

javascript - 如何使用 JavaScript 函数通过单击按钮返回系统日期?

javascript - 在 Javascript 中执行尾端递归时是否必须手动释放内存