如何将在JavaScript中保存为数组的数字与while循环相加

时间:2017-01-18 20:43:22

标签: javascript arrays sum

错误在哪里?我想对数组中的每个数字求和。警报显示NaN

var numbers = [10, 42, 5, 87, 61, 34, 99];
var i = 0; 
var e = 0;
while(i <= numbers.length) {
    e = e + numbers[i]; 
    i++;
}

alert(e);

6 个答案:

答案 0 :(得分:4)

这一行是原因:

while(i <= numbers.length) {

数组为0索引,因此您可以从索引0(包括)转到numbers.length独占)。您将超出该限制,导致您访问未在给定索引处定义的元素。你必须这样做:

while(i < numbers.length) {

答案 1 :(得分:3)

使用 ES2015语法,您可以这样做。

let numbers = [10, 42, 5, 87, 61, 34, 99];
let sum = numbers.reduce((a,b) => a + b);

您可以阅读Array.prototype.reduce(accumulator, element, callback, startingValue) here

答案 2 :(得分:1)

您的情况有误,只需使用&lt; insteead of&lt; =

while(i < numbers.length) 

答案 3 :(得分:1)

有几种方法可以改善这一点。首先,您要将条件更改为i < numbers.length,而不是i <= numbers.length。正如你所写的那样,最后一个数字永远不会计算在内。

另一种可以改进的方法是使用+=表示法 - 当您可以编写e = e + numbers[i]时,无需编写e += numbers[i]

答案 4 :(得分:0)

您可以使用post increment从数组的末尾开始,并检查while条件下的真实性。

内部只需添加项目。

var numbers = [10, 42, 5, 87, 61, 34, 99],
    i = numbers.length,
    e = 0;

while (i--) {
    e += numbers[i]; 
}

console.log(e);

答案 5 :(得分:-1)

问题在于数组长度您正在检查,因为数组索引以0开头。这样做时:

i <= numbers.length

你正在检查[0:10,1:42,2:5,3:87,4:61,5:34,6:99,7:???]因为数字长度是7.解决它只是做:

i < numbers.length 

您不检查数组中的现有数字。

以下是我们在学校的想法:

//main code//
var numbers = [10, 42, 5, 87, 61, 34, 99];
var result = sumIntArray(numbers);
//end of main code//

function sumIntArray(array){
    var result = 0;
    for (var i = 0; i < array.length; i++) {
        if (array[i].isInteger()) {
            result += array[i];
        } else {
            if (i === 0) {
                alert("1st object in array is not number, will skip...");
            } 
            else if (i === 1) {
                alert("2nd object in array is not number, will skip...");
            }  
            else if (i === 2){
                alert("3rd object in array is not number, will skip...");
            }    
            else {
                alert((i+1).toString() + "th object in array is not number, will skip...");
            }
        } 
    }
    return result;
}

for 循环添加了这个i ++你在while循环中创建并使代码更清晰。
无需在主代码中声明 i :)

  1. 始终制作简化主要代码的功能。
  2. 即使有人想打破逻辑,也要制造永远不会出错的功能。
  3. 虽然不能让学校破坏你的创造力,但你的代码很棒! :)