javascript - 在 JavaScript 中使用递归展平嵌套数组

标签 javascript recursion

我试图在保留顺序的同时展平嵌套数组,例如[[1, 2], 3, [4, [[5]]]] 应转换为 [1, 2, 3, 4, 5]

我正在尝试使用递归来执行此操作,但下面的代码不起作用,我不明白为什么。我知道还有其他方法可以做到这一点,但我想知道这有什么问题。

function flatten (arr) {
  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      flatten(arr);
    } else {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

flatten([[1, 2], 3, [4, [[5]]]]);

谢谢

最佳答案

递归调用flatten时,需要将arr[i]传给它,然后用newArr拼接结果。所以替换这一行:

flatten(arr);

与:

newArr = newArr.concat(flatten(arr[i]));

关于javascript - 在 JavaScript 中使用递归展平嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582352/

相关文章:

javascript - 如何在 React JS 中将图像源作为属性传递?

javascript - 客户端和服务器 Meteor 之间的共享集合

c - 递归 FloodFill 算法的段错误

javascript - 将代码重构为尾递归

javascript - 可从网页调用的 Bash 脚本

javascript - 在 if 中声明变量并在外部使用

haskell - 将递归函数重写为管道函数组合

c++ - 二叉搜索树递归插入

javascript - 将 HTML 转换为 MS Word 时添加密码保护

c - 递归函数后在 C 中打开文件的错误文件描述符