用于循环的Concat阵列

Jon*_*Jon 2 arrays concatenation

在尝试使用reduce方法展平数组之后,我尝试使用类似于for循环的方法.任何人都可以解释为什么for循环使用concat不会使数组变平?PS我知道我可以使用带有Array.isArray的嵌套for循环来展平.在看到如何减少数组变平之后,只是期望concat在for循环中工作.

var arrays = [
  [1, 2, 3],
  [4, 5],
  [6]
];

console.log(arrays.reduce(function(arr, elem) {
  return arr.concat(elem);
}, []));

function flatten(arr) {
  var flat = [];
  for (var i = 0; i < arr.length; i++) {
    flat.concat(arr[i]);
  }
  return flat;
}
console.log(flatten(arrays));
Run Code Online (Sandbox Code Playgroud)

chr*_*con 7

concat不修改数组.要使代码工作,您必须为其分配值,然后它将执行相同的操作

var arrays = [[1,2,3], [4,5], [6]];

function flatten(arr) {
    var flat = [];
    for (var i = 0; i < arr.length; i++) {
        flat = flat.concat(arr[i]);
    }
    return flat;
}
console.log(flatten(arrays));
Run Code Online (Sandbox Code Playgroud)

只需一个旁注 - 使用ES6,您可以使用扩展运算符更容易地展平阵列 [].concat(...arr);

var arrays = [[1,2,3], [4,5], [6]];

function flatten(arr) {
    return [].concat(...arr);
}
console.log(flatten(arrays));
Run Code Online (Sandbox Code Playgroud)