首页 > 解决方案 > 有人能解释一下为什么reduce函数能安慰以下数字吗

问题描述

我是 Javascript 新手,今天正在学习 reduce 函数,并浏览了 Mozzila Developer 中的示例,我稍微修改了一个,它给了我一个我无法理解的结果(因为我很新)。有人可以在这里解释结果及其背后的“规则”吗?谢谢

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(accumulator, currentValue) {
  return accumulator + currentValue
});

console.log(flattened)

答案:0、12、34、5

标签: javascriptreduce

解决方案


因为您没有将初始值作为累加器传递,所以这里的初始值是数组[0, 1]。在每次迭代中,执行该操作accumulator + currentValue并将其用作下一次迭代的新累加器(或者,.reduce如果在最后一次迭代中,则作为 的整个返回值)。

在第一次迭代中,[0, 1] + [2, 3]结果为"0,12,3"。这是因为当非数字与 一起使用时+,它们首先被转换为基元,而当数组被转换为基元时,每个项目都用逗号连接。所以

[0, 1] + [2, 3]
// evaluates to
'0,1' + '2,3'
// evaluates to
'0,12,3'

在下一次迭代中:

'0,12,3' + [4, 5]
// evaluates to
'0,12,3' + '4,5'
// evaluates to
'0,12,34,5'

这是最后一次迭代,所以最终结果是'0,12,34,5'.

请注意,没有空格- 数组项由逗号连接,而不是由逗号和空格连接。


推荐阅读