2015-10-30 206 views
1

我通過使用for-loop遍歷數組來添加數組中的值,但它只返回第一個值。我預計會收到2份而不是2014份的預警。For循環不遍歷數組(JavaScript)

我在做什麼錯?

enter link description here

的JavaScript

$(document).ready(function() { 
    var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
    function arraySum(arr) { 
     var answer = 0; 
     for (i = 0; i < array.length; i++) { 
      answer += array[i]; 
      return answer; 
     } 
    } 
    var response = arraySum(array); 
    alert(response); 
}); 
+1

把你的'return'語句放在循環之後,而不是在裏面。另外,您應該在函數內使用參數名稱'arr'。 –

+1

'返回答案;'立即終止循環。將它移到循環之外。 –

+0

我的答案利用了一個jQuery的foreach循環,並消除了缺乏'var i'聲明和標準'for'循環結構,因爲愚蠢的原因而讓很多人絆倒。你已經加載了庫,你可以儘可能地使用它。它也會影響被迭代的對象的類型(對象數組還是數組)。 – CSS

回答

2

因爲你把return語句的循環中,它正在退出與答案的值的函數時,第一次碰到這種return語句(即2) 。你真正需要的是這樣的:

$(document).ready(function() { 
    var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
    function arraySum(arr) { 
     var answer = 0; 
     for (var i = 0; i < array.length; i++) { 
      answer += array[i]; 
      // DON'T return here 
     } 
     // Return HERE 
     return answer; 
    } 
    var response = arraySum(array); 
    alert(response); 
}); 

如果這沒有任何意義,認爲它是這樣的:

要執行的操作八次,當它這樣做你想要做的事結果。在這種情況下,您需要八次添加數字,然後提醒總數。不幸的是,如果你說在循環中返回,它會在每一個這樣的動作(添加)之後嘗試「做某事」(返回)。因爲它試圖在每個這些操作之後返回,所以循環實際上在第一個操作之後中斷,並且永遠不會添加最後的七個數字。如果你想觀看這個過​​程,你實際上可以把警報放在你的迴歸聲明中,並且在每次迭代之後觀察它被擊中(從而接收八次警報)。

作爲一個方面說明,你也應該用var i定義「i」,因爲你可以通過忘記「var」來真正地使用範圍擰緊。我在上面的代碼中修正了這個錯誤。謝謝瑞恩提請注意這一點。

+1

既然你在這裏,你也應該定義'i' ... –

+0

不是無關的,因爲它可以打破循環結構來使用未定義的變量。 JS非常寬容,但在某些情況下,這可能是防止打印出錯的錯誤。 – CSS

+0

雖然你絕對正確的認爲這可能會導致不穩定的行爲,但我覺得這是「無關緊要」,因爲在這個特殊情況下,它不是提問者問題的原因。這就是說,我修改了我的答案。 – ConnorCMcKee

0
$(document).ready(function() { 
var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
function arraySum(arr) { 
    var answer = 0; 
    for (i = 0; i < array.length; i++) { 
     answer += array[i];   
    } 
    return answer; 
} 
var response = arraySum(array); 
alert(response); 
}); 
0

您正在返回循環內的值。當循環第一次執行時,它添加第一個數組值來回答,然後返回答案。此時,您的功能已完成運行。

如果您移動回覆答案;在循環下面,這將按預期工作。

$(document).ready(function() { 
    var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
    function arraySum(arr) { 
     var answer = 0; 
     for (i = 0; i < array.length; i++) { 
      answer += array[i];    
     } 
     return answer; 
    } 
    var response = arraySum(array); 
    alert(response); 
}); 
0

不知道這是一種考驗:)

你有你的FOR循環中有一個return語句。因此,循環計算(0 +陣列[0])

$(document).ready(function() { 
 
    var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
 
    function arraySum(arr) { 
 
     var answer = 0; 
 
     for (i = 0; i < array.length; i++) { 
 
      answer += array[i]; 
 
      //return answer; remove this line 
 
     } 
 
    } 
 
    var response = arraySum(array); 
 
    alert(response); 
 
});

0

你可以使用這個後返回結果:

$.each(array, function(index, value) { 
    answer += value; 
}); 
return answer; 

因爲jQuery有一個內置的foreach功能。

0

除了每個人都已經說過的內容之外,當函數仍然按照將循環移回的方式運行時,我會改變在函數和循環中如何調用數組。

你的數組標題爲「數組」。您在函數參數中將它稱爲「arr」,因此我認爲在函數的後續for循環中,您應該將數組調用標記爲「arr」。無論如何這樣做給了我2014年的正確答案,但我認爲保持函數數組變量在整個執行過程中的標題相同是最好的選擇。

$(document).ready(function() { 
var array = [2, 2, 10, 0, 50, 1900, 25, 25]; 
function arraySum(arr) { 
    var answer = 0; 
    for (i = 0; i < arr.length; i++) { 
     answer += arr[i]; 
    } 
    return answer; 
} 
var response = arraySum(array); 
console.log(response); 
});