为什么我们不能在 Array.map() 中使用展开运算符以及展平数组数组的替代方法是什么?

538*_*MEO 3 javascript spread-syntax

这是我尝试过的:

let a = [[1,2], [3,4]];

a.map(val => ...val)
// => SyntaxError: expected expression, got '...'
// Expected output: [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

我尝试使用明确的return声明和带有括号的周围值,但没有任何效果......

我只是想知道是否有一种简单的方法来返回“扩展数组”?

编辑:现在我已经看到了这个问题,它对扩展运算符的工作原理有精确的了解,尽管它并没有真正回答如何“展平”数组的问题(我修改了问题的标题)。

Nic*_*ons 7

这不是有效的语法,为此,您需要将数组展开(“解压”其内容)到某种容器(例如数组)中。但是,如果您要做类似的事情:

a.map(val => [...val])
Run Code Online (Sandbox Code Playgroud)

您不会数组做太多事情,相反,您最终会得到同一数组的副本。因此,您可以使用.map.reduceor .flatMap/之外的不同方法.flat来实现所需的输出:

.reduce与扩展语法一起使用:

使用.flatMap()

let a = [[1,2], [3,4]];

let res = a.reduce((acc, val) => [...acc, ...val], []);
console.log(res)
Run Code Online (Sandbox Code Playgroud)

.flatMap()然而,在这里毫无用处,因此使用.flat()就足够了:

let a = [[1,2], [3,4]];

let res = a.flatMap(val => val); // map the contents (without the holding array) [[1, 2], [3, 4]] -> [1, 2, [3, 4]] -> [1, 2, 3, 4]
console.log(res)
Run Code Online (Sandbox Code Playgroud)