2015-02-11 83 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; 
}