Javascript 我在字符串数组上调用了reduce。为什么会产生一个数字?
我有一个数字,我想找出每个数字的平方和。我首先把它转换成一个字符串,把它拆分成一个代表每个数字的字符串数组,然后用reduce来求平方和。我用下面的代码得到了正确的结果,但我不明白它为什么会起作用。pow()会将数字转换为数字,但如果将其添加到字符串中,它会不会将它们连接起来并生成一个字符串?比如说,如果我做的是'1'+数学.pow('2',2',我会期望'14'Javascript 我在字符串数组上调用了reduce。为什么会产生一个数字?,javascript,arrays,reduce,Javascript,Arrays,Reduce,我有一个数字,我想找出每个数字的平方和。我首先把它转换成一个字符串,把它拆分成一个代表每个数字的字符串数组,然后用reduce来求平方和。我用下面的代码得到了正确的结果,但我不明白它为什么会起作用。pow()会将数字转换为数字,但如果将其添加到字符串中,它会不会将它们连接起来并生成一个字符串?比如说,如果我做的是'1'+数学.pow('2',2',我会期望'14' let num=19 const result=num.toString().split(“”).reduce(函数(求和,当前)
let num=19
const result=num.toString().split(“”).reduce(函数(求和,当前){
返回和+数学功率(电流,2);
}, 0)
控制台日志(结果)代码>传递给reduce
的第二个参数将是累加器的初始值。在此,您通过了0:
num.toString().split('').reduce(function(sum, curr) {
return sum + Math.pow(curr, 2);
}, 0)
// ^
因此,在第一次迭代中,sum
的值是一个数字。然后向其中添加一个数字,这将产生另一个数字,该数字将在下一次迭代中成为累加器-依此类推,直到结束。累加器总是一个数字
如果未指定初始值,累加器的第一个值将是数组中的第一项(字符'1'
),并且所有内容都将被连接而不是添加:
let num=19
const result=num.toString().split(“”).reduce(函数(求和,当前){
返回和+数学功率(电流,2);
})
控制台日志(结果)
1^2+9^2=1+81=82
sum
是一个数字,Math.pow
返回一个数字。+
运算符没有字符串操作数。如果使用'0'
作为sum
的初始值而不是0
,您将看到预期的行为。但我的数组是['1',9']。那么在第一次迭代中,我不是在添加0+1吗?哪个应该强制求和为“1”?Math.pow
返回一个数字。在第一次迭代中,返回sum+Math.pow(curr,2)代码>解析为返回0+Math.pow('1',2)代码>->返回0+1代码>->返回1
。哦,等等,我看看现在发生了什么。不要介意!非常感谢。