2015-02-11 89 views
0

作为标题说我想总结使用for循环遍历数组。 你可以给我一些指导,说明我在哪里会出错。我将返回值NaN。遍历一个数组,并总结所有值与JS

var total = 0; 

function sum(input) { 
    for (idx=0; idx<=input; idx++) { 
     total += input[idx]; 
    } 
    return total; 
} 
+0

变量总数未被声明 – aurelius 2015-02-11 13:57:01

+0

您可能想要在'for'循环中使用'idx 2015-02-11 13:58:25

+0

谢谢,是的,改变<= to =似乎有帮助 – 2015-02-11 14:01:19

回答

0

您正在使用input既作为一个整数,而当数值的数组。可能你的意思是for(var idx = 0; idx < input.length; ++idx)...

+0

ahh非常感谢..这就是我错误的地方..现在已经排序它非常感谢 – 2015-02-11 14:03:11

+0

@dannywhite:一定要考虑其他答案:您的'total'是全球范围的。 – xtofl 2015-02-11 14:11:18

2

你需要ot声明总功能,你也需要声明idx。另一件事,而不是写idx <= input.length你必须写idx <= input.length - 1。由于最后的索引将是未定义的。

尝试

function sum(input) { 
    total = 0; 
    for (var idx = 0; idx <= input.length - 1; idx++) { 
     total += input[idx]; 
    } 
    return total; 
} 
+0

total应该在sum函数中声明... – aurelius 2015-02-11 13:58:28

+0

仍然收到NaN .. – 2015-02-11 13:58:46

0

变量没有声明!

function sum(input) { 
    var total = 0; 
    for (idx=0; idx <= input.length; idx++) { 
     total += input[idx]; 
    } 
    return total; 
} 
+0

它似乎向我宣布。只有它是全球性的,所以结果会一直增长。 – xtofl 2015-02-11 14:02:29

5

你其实并不需要一个循环做到这一点在现代浏览器,你可以使用Array.reduce功能:

var sum = input.reduce(function(a,b){ 
    return a+b; 
}, 0); 
+0

不错的功能风格 - 不是很新手友好,但。 – xtofl 2015-02-11 14:03:35

0

问题而导致在NaN是因为你的数组遍历数组,直到结束的,而不是从指数0input.length-1 试试这个: http://jsfiddle.net/t9tfofxv/

var total = 0; 
function sum(input) { 
for (var idx=0; idx< input.length; idx++) { 
    total += input[idx]; 
} 
return total; 
} 
var s=sum([1,2,3,4]); 
alert(s); 
0

声明函数内部的变量总数,并且还使用input.length-1来定义循环的范围:

function sum(input) { 
    var total = 0; 
    for (idx=0; idx <= input.length-1; idx++) { 
     total += input[idx]; 
    } 
    return total; 
}