我想创建一个从数组中总结值的基本函数。我知道数组简化方法,但我最初想要使用循环“for”而不是如下......但它返回NaN ...为什么?
var numbers=[1,2];
var total;
function sum(array){
total=0;
for(var x=0;x<=array.length;x++){
total += array[x];
}
return total;
}
答案 0 :(得分:1)
执行sum(numbers)
,同样在循环中,中断条件应该是x<array.length;
,您也不需要使total
成为全局变量来继续向其添加数组值。
var numbers = [1, 2];
function sum(array) {
var total = 0;
for (var x = 0; x < array.length; x++) {
total += array[x];
}
return total;
}
var total = sum(numbers);
alert(total);
虽然较短的方法是在数组上使用.reduce
var array = [1,2]
var sum = array.reduce(function(prev, curr) { return prev + curr; }, 0);
alert(sum);
此处您还可以提供 Arrow Function ,而不是完整的功能。
var array = [1, 2]
var sum = array.reduce((prev, curr) => prev + curr);
alert(sum);
答案 1 :(得分:0)
您还可以使用reduce来总结所有元素:
sum = array.reduce(function(a, b) { return a + b; }, 0);
答案 2 :(得分:0)
如果您想继续使用初始方法,那么您不必从函数内返回全局变量。您可以直接在函数内部更改全局变量;
var numbers=[1,2],
total;
function sum(array){
total=0;
for(var x = 0, len = array.length; x < len; x++){
total += array[x];
}
}
在其他情况下,当然,当您打算形成独立的结果时,最好使用局部变量
答案 3 :(得分:0)
你得到NAN,因为循环的条件是x<=array.length
,最后一次迭代会将array[length]
添加到总和中,而数组的最后一项是array[length - 1]