我是 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'
。
请注意,没有空格 - 数组项仅由逗号连接,而不是由逗号和空格连接。
关于javascript - 有人可以解释为什么 reduce 函数安慰了以下数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038226/