我有一个数字,我想找到每个数字的平方和。我首先将其转换为字符串,将其拆分为代表每个数字的字符串数组,然后使用reduce求平方和。我在下面的代码中得到了正确的结果,但是我对它为什么起作用感到困惑。 Math.pow()会将数字转换为数字,但是如果将其添加到字符串中,不是将它们连接起来并生成字符串吗?就像我做了'1'+ Math.pow('2',2)一样,我期望的是'14'。
let num = 19
const result = num.toString().split('').reduce(function(sum, curr) {
return sum + Math.pow(curr, 2);
}, 0)
console.log(result);
上面的代码产生82(这是我想要的),但我不知道为什么会起作用。
答案 0 :(得分:3)
传递给reduce
的第二个参数将是累加器的初始值。在这里,您传递了0:
num.toString().split('').reduce(function(sum, curr) {
return sum + Math.pow(curr, 2);
}, 0)
// ^
因此,第一次迭代中sum
的值是一个数字。然后,向其添加一个数字,该数字将导致另一个 数字,该数字将成为下一次迭代的累加器-依此类推,直到结束。累加器始终是数字。
如果没有指定初始值,则累加器的第一个值将是数组中的第一项(字符'1'
),并且所有内容都将< em>串联,而不是添加:
let num = 19
const result = num.toString().split('').reduce(function(sum, curr) {
return sum + Math.pow(curr, 2);
})
console.log(result);
结果是'181'
,因为'1' + 81 === '181'
。