2016-05-16 121 views
2

面临的挑战是采取简单的阵列:锋的Javascript第5章练习1

var arrays = [[1,2,3],[4,5],[6]]; 

并使用减少/ 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

initialValue:可选。作为回调的第一个调用的第一个参数的值。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – IrkenInvader

回答

4

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

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

MDN(注意previousValue是在回调的第一个参数,currentValue是第二个参数):

首次回调被调用时,previousValuecurrentValue可以是两个值中的一个。如果在呼叫中提供了initialValue以减少,则previousValue将等于initialValuecurrentValue将等于数组中的第一个值。如果没有提供initialValue,则previousValue将等于阵列中的第一个值,而currentValue将等于第二个值。

4

初始值。

的差异出现在两种情况:如果arrays是空数组

  • 你的版本会崩溃。他们不会。

  • 如果arrays包含单个数组,您将获得该实例,但它们将其复制到一个新的实例中。