[英]Eloquent Javascript Chapter 5 Exercise 1
挑战是采取一个简单的阵列:
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函数中做了什么,是不是我把它遗漏了?
reduce
可以选择传递初始值。 在他们的解决方案中,他们提供了一个空数组,因此可以从那里添加其余的值。
但是,您的工作原理是因为reduce
使用数组中的第一个值作为初始值(如果没有给出)。
从MDN (请注意, previousValue
是回调中的第一个参数, currentValue
是第二个参数):
第一次调用回调时,
previousValue
和currentValue
可以是两个值之一。 如果在reduce的调用中提供了initialValue
,则previousValue
将等于initialValue
,currentValue
将等于数组中的第一个值。 如果没有提供initialValue
,那么previousValue
将等于数组中的第一个值,currentValue
将等于第二个值。
初始值。
差异出现在两种情况中:
如果arrays
是空数组,您的版本将崩溃。 他们不会。
如果arrays
包含单个数组,则会获得该实例,但会将其复制到新实例中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.