错误在哪里?我想对数组中的每个数字求和。警报显示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);
答案 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 :)
虽然不能让学校破坏你的创造力,但你的代码很棒! :)