挑战是采取一个简单的阵列:
var arrays = [[1,2,3],[4,5],[6]];
使用reduce / concat创建一个包含所有值的单个数组并登录到控制台,即[1,2,3,4,5,6]所以我制作了:
console.log(arrays.reduce(function(flat, current) {
return flat.concat(current);
}));
完全有效,但在检查他们的解决方案时,他们有一点不同:
console.log(arrays.reduce(function(flat, current) {
return flat.concat(current);
}, []));
[]参数在reduce函数中做了什么,是不是我把它遗漏了?
答案 0 :(得分:4)
reduce
可以选择传递初始值。在他们的解决方案中,他们提供了一个空数组,因此可以从那里添加其余值。
但是,你的工作是因为reduce
使用数组中的第一个值作为初始值(如果没有给出)。
来自MDN(请注意previousValue
是回调中的第一个参数,currentValue
是第二个参数):
第一次调用回调时,
previousValue
和currentValue
可以是两个值之一。如果在reduce减号调用中提供initialValue
,则previousValue
将等于initialValue
,currentValue
将等于数组中的第一个值。如果未提供initialValue
,则previousValue
将等于数组中的第一个值,currentValue
将等于第二个值。
答案 1 :(得分:4)
初始值。
两种情况出现差异:
如果arrays
为空数组,您的版本将崩溃。他们不会。
如果arrays
包含单个数组,则会获得该实例,但会将其复制到新实例中。