当array.length==1时,为什么js.reduce()的行为不同



当精简数组只有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"]}

您缺少reduce的第二个参数,它为操作设定了一个起始值。

reduce的行为在有和没有第二个参数的情况下都会发生变化。如果没有第二个参数,它将第一个元素视为种子。

initialValue可选
第一次调用回调时将previousValue初始化为的值。如果指定initialValue,也会导致currentValue初始化为数组中的第一个值。如果未指定initialValue,则previousValue初始化为数组中的第一个值,currentValue初始化为阵列中的第二个值。

reduce文档

最新更新