递归展平数组

nguyenngoc101

我试图递归地实现数组展平函数。这是代码:

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


console.log(flatten([1, 2, 3, 4, [5]]));
/*
result: [1, 2, 3, 4]
expected: [1, 2, 3, 4, 5]
*/

但是我不知道为什么结果不正确。请帮我解释一下。

罗南·塞皮斯(Ronen Cypis)

concat()方法返回一个数组,该数组由调用该数组的数组以及作为参数提供的数组和/或值连接而成。

flatArr.concat(...)不变flatArr...您需要像这样分配它:

flatArr = flatArr.concat('flatten(arr[i]));

这是一个具有3级深度数组的工作示例:

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

var arr = [1,2,3,4,[5,6,[7,8]]];
var flatten = flatten(arr);

$('#result').html(JSON.stringify(flatten));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

您可以在此处阅读有关Array.concat函数的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章