在展平数组上检出this post后,我注意到没有人使用数组方法forEach
。我试了一下但失败了,只收回了一个空数组:
let arrays = [[1, 2, 3], [4, 5], [6]];
let result = [];
arrays.forEach( (element) => {
result.concat(element)
})
console.log(result) //[]
我哪里出错了?
答案 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)