2016-12-28 147 views
1

爲什麼此代碼返回10而不是2?添加數組元素Javascript

var arrToSum = [2, 4, 10]; 
function sumArray(array) { 
    var result = 0; 
    for (var i = array[0]; i < array.length; i++) { 
    result += array[i]; 
    } 
    return result; 
} 
sumArray(arrToSum); 

// function returns 10 

如果下面的循環邏輯,我會增加結果變量之後結束,因爲下一個等於3和循環應該結束。請解釋發生了什麼。

+2

因爲'i'從'2'運行到'2',所以只需將'arr [2]'('10')添加到' 0'。我不清楚你打算使用'var i = array [0];'。擴大一點:*「因爲下一個'i'等於'3'」*是的,你只加了一個值,循環在一次迭代後停止,但是因爲'i'從'2開始'你是添加'arr [2]',而不是'arr [0]'。順便說一句,如果你想明白你的代碼在做什麼,設置一個斷點,一步一步通過你的代碼並檢查變量。 –

+2

因爲'array [2]'是10 –

回答

2

事情是如何for循環工作中:

for (var i = array[0]; i < array.length; i++) {

在循環中,這是第一次迭代執行後的結果;

第一次迭代; I = 2

var i = array[0]; // i = 2; 
result += array[i]; // result = 10; 

array[i]array[2]其是10.因此,result是10

第二迭代; i = 3

array.length是3,因爲它有3個元素。條件i < array.length;爲false且代碼打破循環,將結果返回爲10.

1

您是從2開始,而不是從0變化

for (var i = array[0]; i < array.length; i++) { 

for (var i = 0; i < array.length; i++) { 
0

([0]數組的值)這就是爲什麼你應該熟悉的JavaScript函數式編程。 mapfilterreduce是你的朋友。特別是map

儘量避免常規循環,因爲它們更容易出錯。在你的情況下,你已經搞砸了計數器變量i

var sum = [2, 4, 10].reduce((a, b) => a + b, 0);