这是我尝试过的:
let a = [[1,2], [3,4]];
a.map(val => ...val)
// => SyntaxError: expected expression, got '...'
// Expected output: [1,2,3,4]
我尝试使用显式 return
语句和带括号的包围值,但都没有用...
我只是想知道是否有一种简单的方法可以返回“展开的数组”?
编辑:现在我看到了this SO question尽管它并没有真正回答关于如何“展平”数组的问题(我修改了问题的标题),但它已经精确地了解了传播运算符的工作方式。
这不是有效的语法,要使其正常工作,您需要将数组的内容展开(“解压缩”)到某种容器(例如数组)中。但是,如果您要执行以下操作:
a.map(val => [...val])
您不会对您的数组做很多事情,相反,您最终会得到同一个数组的副本。因此,您可以使用 .map
以外的不同方法,例如 .reduce
或 .flatMap
/.flat
来实现你想要的输出:
将 .reduce
与传播语法一起使用:
let a = [[1,2], [3,4]];
let res = a.reduce((acc, val) => [...acc, ...val], []);
console.log(res)
使用.flatMap()
:
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)
然而,
.flatMap()
在这里毫无用处,因此使用 .flat()
就足够了:
let a = [[1,2], [3,4]];
let res = a.flat();
console.log(res)