Сумма чисел в массиве с JavaScript - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь получить сумму всех чисел в массиве.Я пытаюсь сделать это самым простым способом, но отображение суммы 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>

Ответы [ 5 ]

0 голосов
/ 07 октября 2018

var sum = [1, 2, 3].reduce(add, 0);
function add(a, b) {
  return a + b;
}
console.log(sum); // 6
0 голосов
/ 07 октября 2018

Вы каждый раз создаете экземпляр суммы, вынимаете var сумму из цикла, и у вас есть сумма.

Также вы можете использовать Array.prototype.reduce: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

0 голосов
/ 07 октября 2018

Проблема в том, что 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>
0 голосов
/ 07 октября 2018

Вы создаете новую переменную 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);
0 голосов
/ 07 октября 2018

Проблема в том, что вы объявляете переменную суммы внутри цикла и не инициализируете ее.

Таким образом, вы получаете 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...