这是我尝试过的:
let a = [[1,2], [3,4]];
a.map(val => ...val)
// => SyntaxError: expected expression, got '...'
// Expected output: [1,2,3,4]
我尝试使用显式return
语句和带括号的值,但没有用...
我只是想知道是否有一种简单的方法可以返回“扩展数组”?
编辑:现在我看到this SO question可以精确地知道散布运算符的工作原理,尽管并没有真正回答如何“展平”数组的问题(我修改了问题的标题)。
答案 0 :(得分:3)
尝试使用a.flatMap(x=>x);
来平整数组和映射元素或flat
(无映射)
a.flat();
let a = [[1,2], [3,4]];
let r=a.flat();
console.log(r);
在flat
arg中,您可以设置深层次的扁平化-设置Infinity
将扁平化任何嵌套数组
let a = [[1,2,[3,4,[5,[6]]]], [[7,[8]],9]];
let r=a.flat(Infinity);
console.log(r);
答案 1 :(得分:2)
这不是有效的语法,要执行此操作,您需要将数组的内容散布(“解包”)到某种类型的容器(例如数组)中。但是,如果您要执行以下操作:
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)
如果只想展平二维数组,建议您选择选项一(.reduce
),因为它具有最佳的浏览器支持。 .flat()
和.flatMap()
没有很好的浏览器支持,但可以用于展平n维数组(如果需要,可以使用.flat(Infinity)
)
答案 2 :(得分:2)
如注释中所述,函数只能返回一个值。
但是您可以使用一个简单的技巧:
let a = [[1,2], [3,4]];
a.reduce((a,b) => a.concat(b),[])
// Expected output: [1,2,3,4]