我正在尝试获取数组中所有数字的总和。我正在尝试以最简单的方式进行操作,但总和显示为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>
答案 0 :(得分:2)
您将为每次循环迭代创建一个新的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);
答案 1 :(得分:2)
var sum = [1, 2, 3].reduce(add, 0);
function add(a, b) {
return a + b;
}
console.log(sum); // 6
答案 2 :(得分:1)
问题在于您在循环内声明了sum变量,而没有对其进行初始化。
因此,您得到router.push/replace
等于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;
答案 3 :(得分:1)
问题在于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>
答案 4 :(得分:-1)
您每次都实例化求和,将var sum移出循环并突出求和。
还可以使用Array.prototype.reduce: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce