2016-01-06 45 views
0

我想創建一個基本函數,將數組中的值相加。我知道數組減少的方法,但我最初想要使用循環「for」,而不是像下面那樣...但是它返回NaN ...爲什麼?將數組作爲js函數的參數

var numbers=[1,2]; 
var total; 
function sum(array){ 
    total=0; 
    for(var x=0;x<=array.length;x++){  
    total += array[x]; 
    } 
    return total; 
} 
+1

'x <= array.length' ==>'x Tushar

回答

0

你得到NAN因爲,作爲循環的條件是x<=array.length,最後一次迭代增加array[length]到sum,而數組的最後一項是array[length - 1]

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);

0

你也可以使用reduce來總結所有元素:

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

如果你想留在你最初的方法,那麼你就必須返回全球從函數內部變量。您可以直接在函數內部更改全局變量;

var numbers=[1,2], 
    total; 
function sum(array){ 
    total=0; 
    for(var x = 0, len = array.length; x < len; x++){  
    total += array[x]; 
    } 
} 

在其他情況下,當然,使用局部變量的最好,當你打算組建獨立的結果