Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我在字符串数组上调用了reduce。为什么会产生一个数字?_Javascript_Arrays_Reduce - Fatal编程技术网

Javascript 我在字符串数组上调用了reduce。为什么会产生一个数字?

Javascript 我在字符串数组上调用了reduce。为什么会产生一个数字?,javascript,arrays,reduce,Javascript,Arrays,Reduce,我有一个数字,我想找出每个数字的平方和。我首先把它转换成一个字符串,把它拆分成一个代表每个数字的字符串数组,然后用reduce来求平方和。我用下面的代码得到了正确的结果,但我不明白它为什么会起作用。pow()会将数字转换为数字,但如果将其添加到字符串中,它会不会将它们连接起来并生成一个字符串?比如说,如果我做的是'1'+数学.pow('2',2',我会期望'14' let num=19 const result=num.toString().split(“”).reduce(函数(求和,当前)

我有一个数字,我想找出每个数字的平方和。我首先把它转换成一个字符串,把它拆分成一个代表每个数字的字符串数组,然后用reduce来求平方和。我用下面的代码得到了正确的结果,但我不明白它为什么会起作用。pow()会将数字转换为数字,但如果将其添加到字符串中,它会不会将它们连接起来并生成一个字符串?比如说,如果我做的是'1'+数学.pow('2',2',我会期望'14'

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
。哦,等等,我看看现在发生了什么。不要介意!非常感谢。