簡體   English   中英

使用javascript數組中的數字總和

[英]Sum of numbers in an array with javascript

我試圖獲取數組中所有數字的總和。 我正在嘗試以最簡單的方式進行操作,但總和顯示為NAN。 為什么會這樣呢? 請幫忙

 var numbers = [45, 34, 12, 10, 8, 9]; var i; for(i=0 ; i<numbers.length; i++){ var sum = sum + numbers[i]; //alert(sum); } document.getElementById("demo").innerHTML="The sum is" + sum; 
 <h2>JavaScript</h2> <p>This example finds the sum of all numbers in an array:</p> <p id="demo"></p> 

您正在為每個循環迭代創建一個新的sum變量,也在聲明它之前使用它,因此undefined + <some numer>給您NaN

 var total = 0; [45, 34, 12, 10, 8, 9].forEach(num => {total += num}); document.getElementById("demo").innerHTML=`The sum is: ${total}`; 
 <h2>JavaScript</h2> <p>This example finds the sum of all numbers in an array:</p> <p id="demo"></p> 

另外,for循環也不錯:

 var total = 0; var numbers = [45, 34, 12, 10, 8, 9]; for (var i = 0; i < numbers.length; total += numbers[i++]); console.log('total', total); 

 var sum = [1, 2, 3].reduce(add, 0); function add(a, b) { return a + b; } console.log(sum); // 6 

問題是您在循環內聲明了sum變量,而沒有初始化它。

這樣就得到了undefined + numbers[i]等於NaN

 var numbers = [45, 34, 12, 10, 8, 9]; var i; var sum = 0; for(i=0 ; i<numbers.length; i++){ sum = sum + numbers[i]; } document.getElementById("demo").innerHTML="The sum is" + sum; 
 <p id="demo"></p> 

問題在於sum是在函數范圍之外定義的,因此您實際上要執行的操作是var sum = undefined + numbers[i] (即NaN )。

即使這樣,也最好使用reduce或箭頭功能(如果可以使用ES6)。

使用reduce()

 var numbers = [45, 34, 12, 10, 8, 9], sum = numbers.reduce(function(a, b) { return a + b; }, 0); document.getElementById('output').innerHTML = sum; 
 <div id="output"></div> 

使用箭頭功能

 var numbers = [45, 34, 12, 10, 8, 9], sum = numbers.reduce((a, b) => a + b, 0); document.getElementById('output').innerHTML = sum; 
 <div id="output"></div> 

您每次都實例化求和,將var sum移出循環並突出求和。

您也可以使用Array.prototype.reduce: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM