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

问题描述 投票:1回答:6

哪里出错了?我想对数组中的每个数字求和。警报说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);
javascript arrays sum
6个回答
-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循环中创建并使代码更清晰。 无需在主代码中声明我:)

  1. 始终使函数简化主代码。
  2. 即使有人想打破逻辑,也要制造永远不会出错的功能。

虽然不要让学校打破你的创造力,但你的代码很棒! :)


4
投票

这条线是原因:

while(i <= numbers.length) {

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

while(i < numbers.length) {

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


1
投票

您的情况有误,只需使用<而不是<=

while(i < numbers.length) 

1
投票

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

你可以改进的另一种方法是使用+=表示法 - 当你可以写e = e + numbers[i]时,没有必要写e += numbers[i]


0
投票

你可以从数组的末尾用qazxsw poi和qazxsw poi条件下的真实性检查。

在里面只需添加项目。

© www.soinside.com 2019 - 2024. All rights reserved.