JavaScript 扩展运算符可以像这样组合数组:
const a = [1,2,3];
const b = [4,5,6];
console.log([...a,...b]);
当“编译时”参数数量未知时我也可以使用它吗?
在下面的示例中,我不知道如何使用展开运算符,因此我使用了 reduce
和 concat
。
const arrays = [[1,2,3],[4,5,6]];
console.log(arrays.reduce((a,b)=>a.concat(b)));
这是预期的方式还是我可以以某种方式使用扩展运算符与可变数量的参数?
最佳答案
如果您不知道要传播多少内容,则无法使用 ...
编写传播它们的代码。这就像 +
那样:您可以将三件事加在一起 (a + b + c
),但如果您不知道要添加多少,您不能直接为其编写代码。
您的reduce
可以使用展开而不是concat
(但请继续阅读):
const arrays = [[1,2,3],[4,5,6]];
console.log(arrays.reduce((a,b)=>[...a, ...b]));
但是这和 concat
都是低效的(这可能重要也可能不重要),因为它们创建一个新数组并重新复制已经复制的元素每个输入。如果效率是一个限制,只需使用一个简单的循环:
const arrays = [[1,2,3],[4,5,6]];
const result = [];
for (const entry of arrays) {
result.push(...entry);
}
console.log(result);
或者,如果您确实喜欢在单个表达式中执行此操作,则可以将其硬塞到 reduce
中(因为基本上任何数组操作都可以硬塞到 reduce
中):
const arrays = [[1,2,3],[4,5,6]];
console.log(arrays.reduce((acc,entry) => {
acc.push(...entry);
return acc;
}, []));
我和Brian Terlson在一起,不过:对我来说,reduce
被过度使用了。
最后,对于这个特定问题,我们得到 flat
现在:
const arrays = [[1,2,3],[4,5,6]];
console.log(arrays.flat());
关于JavaScript 将运算符扩展到可变数量的参数上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391464/