我想創建一個基本函數,將數組中的值相加。我知道數組減少的方法,但我最初想要使用循環「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;
}
我想創建一個基本函數,將數組中的值相加。我知道數組減少的方法,但我最初想要使用循環「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;
}
你得到NAN因爲,作爲循環的條件是x<=array.length
,最後一次迭代增加array[length]
到sum,而數組的最後一項是array[length - 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);
你也可以使用reduce來總結所有元素:
sum = array.reduce(function(a, b) { return a + b; }, 0);
如果你想留在你最初的方法,那麼你就必須返回全球從函數內部變量。您可以直接在函數內部更改全局變量;
var numbers=[1,2],
total;
function sum(array){
total=0;
for(var x = 0, len = array.length; x < len; x++){
total += array[x];
}
}
在其他情況下,當然,使用局部變量的最好,當你打算組建獨立的結果
'x <= array.length' ==>'x
Tushar