【问题标题】:Flatten an array with forEach使用 forEach 展平数组
【发布时间】:2018-04-01 07:09:20
【问题描述】:
在查看了this post 的扁平化数组后,我注意到没有人使用过数组方法forEach。我试了一下,失败了,只收到一个空数组:
let arrays = [[1, 2, 3], [4, 5], [6]];
let result = [];
arrays.forEach( (element) => {
result.concat(element)
})
console.log(result) //[]
我哪里做错了?
【问题讨论】:
标签:
javascript
arrays
foreach
concat
【解决方案1】:
你必须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) //[]
文档:concat
【解决方案2】:
.concat() 总是返回一个新数组。它不会修改它正在操作的数组。
您假设.concat() 将在完成其操作后将结果保存在其操作数中。然而事实并非如此。您需要在.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);
【解决方案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)