用于循环的Concat阵列

时间:2017-07-28 20:19:45

标签: arrays concatenation

在尝试使用reduce方法展平数组之后,我尝试使用类似的for循环方法。 任何人都可以解释为什么for循环使用concat不会使数组变平? 附:我知道我可以使用带有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));

1 个答案:

答案 0 :(得分: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));

只是一个旁注 - 使用ES6,您可以使用展开运算符[].concat(...arr);

更容易地展平数组

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

function flatten(arr) {
    return [].concat(...arr);
}
console.log(flatten(arrays));