使用forEach展平数组

时间:2018-04-01 07:09:20

标签: javascript arrays foreach concat

在展平数组上检出this post后,我注意到没有人使用数组方法forEach。我试了一下但失败了,只收回了一个空数组:

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

arrays.forEach( (element) => {
    result.concat(element)
})

console.log(result) //[]

我哪里出错了?

3 个答案:

答案 0 :(得分:5)

您必须result = result.concat(element)

  

concat()方法用于合并两个或多个数组。这种方法   不会更改现有数组,而是返回一个新数组。

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

arrays.forEach((element) => {
  result = result.concat(element)
})

console.log(result) //[]

Doc:concat

答案 1 :(得分:3)

.concat()始终返回一个新数组。它不会修改它正在运行的数组。

您假设.concat()将在完成其opeartion后将结果保存在其操作数中。然而事实并非如此。您需要在.concat()之后显式保存结果:

result = result.concat(element);

<强>演示:

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

arrays.forEach((element) => {
  result = result.concat(element)
});

console.log(result);

您也可以使用spread syntax代替.forEach()来平展数组。

let result = [].concat(...arrays);

<强>演示:

let arrays = [[1, 2, 3], [4, 5], [6]];
let result = [].concat(...arrays);

console.log(result);

答案 2 :(得分:3)

concat会返回一个新数组,因此您需要将其分配给result = result.concat(element)

之类的结果

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

arrays.forEach( (element) => {
    result = result.concat(element)
})

console.log(result)