【发布时间】:2022-01-02 00:25:43
【问题描述】:
当缩减数组只有 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 属性:
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"]}
【问题讨论】:
-
你的减速器不工作。对于数组中的第三本书,prev.books 将是未定义的(因为 prev 现在是一个 array)。您应该阅读 reduce 的实际作用:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
如果
[["Bible","Harry"],["War","Romeo"]]是预期结果,就使用:friends.map(o => o.books)
标签: javascript reduce