2016-05-16 120 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包含單個數組,您將獲得該實例,但它們將其複製到一個新的實例中。