当精简数组只有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
文档