當縮減陣列只有 1 個元素時,為什么 JS .reduce() 行為會有所不同?
//friends with 2 elements behave as expected
var friends = [
{a:1, books: ['Bible', 'Harry']},
{a:2, books: ['War', 'Romeo']},
]
var allbooks = friends.reduce((prev, curr) => [prev.books, curr.books])
console.log(allbooks) //as expected: [["Bible","Harry"],["War","Romeo"]]
然而,如果friends.length==1,它回傳整個物件,而不僅僅是books prop:
var friends = [ {a:1, books: ['Bible', 'Harry']} ]
var allbooks = friends.reduce((prev, curr) => [prev.books, curr.books])
console.log(allbooks) //result: {"a":1,"books":["Bible","Harry"]}
uj5u.com熱心網友回復:
您缺少第二個引數,reduce該引數使用起始值為操作設定種子。
reduce有和沒有第二個引數的變化行為。如果沒有第二個引數,它將第一個元素視為種子。
initialValue 可選
在第一次呼叫回呼時將 previousValue 初始化為的值。如果指定了 initialValue,這也會導致 currentValue 被初始化為陣列中的第一個值。如果未指定initialValue,則previousValue 初始化為陣列中的第一個值,currentValue 初始化為陣列中的第二個值。
reduce 檔案
uj5u.com熱心網友回復:
謝謝 Jamiec,您是對的:initialValue 是可選的,但沒有它,行為會發生變化。
jonrsharpe 也是正確的,它不起作用:當我簡化檔案中的示例時,我導致了錯誤。
正確:var allbooks2 =friends.reduce((prev, curr) => [prev, curr.books], [])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363929.html
標籤:javascript 降低
上一篇:JavaScript查找:如果物件鍵存在于另一個物件陣列中,則更新陣列中物件的值,類似于excel中的v-lookup
