javascript - 有人能解释一下为什么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
解决方案
因为您没有将初始值作为累加器传递,所以这里的初始值是数组[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'
.
请注意,没有空格- 数组项仅由逗号连接,而不是由逗号和空格连接。
推荐阅读
- java - Android无法设置通知
- c# - JWT WriterToken 函数抛出 IDX10653 错误
- amazon-web-services - IAM 和 AWS 组织之间的区别
- r - 在 R 中按 2 个变量分组的数据框中的多行求和
- mongodb - MongoDB - 将子属性作为别名返回
- java - 如何通过外部 C/Go/Java 程序分析 Jmeter 响应
- python - Twilio程序发送并等待回复:如何处理?
- python - 基于相似值的 Set 子集?
- clojure - 在使用可能消耗任意数量元素的函数将长序列转换为较短序列时避免循环重复
- flutter - 将数据传递到新的 Page Flutter