嵌套数组的递归方法,而不使用JavaScript中的.concat或.reduce

时间:2017-05-25 19:36:35

标签: 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);

1 个答案:

答案 0 :(得分:3)

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

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

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

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