雄辩的Javascript第5章练习1

时间:2016-05-16 20:11:07

标签: javascript

挑战是采取一个简单的阵列:

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函数中做了什么,是不是我把它遗漏了?

2 个答案:

答案 0 :(得分:4)

reduce可以选择传递初始值。在他们的解决方案中,他们提供了一个空数组,因此可以从那里添加其余值。

但是,你的工作是因为reduce使用数组中的第一个值作为初始值(如果没有给出)。

来自MDN(请注意previousValue是回调中的第一个参数,currentValue是第二个参数):

  

第一次调用回调时,previousValuecurrentValue可以是两个值之一。如果在reduce减号调用中提供initialValue,则previousValue将等于initialValuecurrentValue将等于数组中的第一个值。如果未提供initialValue,则previousValue将等于数组中的第一个值,currentValue将等于第二个值。

答案 1 :(得分:4)

初始值。

两种情况出现差异:

  • 如果arrays为空数组,您的版本将崩溃。他们不会。

  • 如果arrays包含单个数组,则会获得该实例,但会将其复制到新实例中。