[英]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.