簡體   English   中英

雄辯的Javascript第5章練習1

[英]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是第二個參數):

第一次調用回調時, previousValuecurrentValue可以是兩個值之一。 如果在reduce的調用中提供了initialValue ,則previousValue將等於initialValuecurrentValue將等於數組中的第一個值。 如果沒有提供initialValue ,那么previousValue將等於數組中的第一個值, currentValue將等於第二個值。

初始值。

差異出現在兩種情況中:

  • 如果arrays是空數組,您的版本將崩潰。 他們不會。

  • 如果arrays包含單個數組,則會獲得該實例,但會將其復制到新實例中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM