编写一个sum()函数,该函数需要一个数字数组

时间:2018-09-19 15:49:18

标签: javascript arrays loops

有人可以向我解释我在这里做错了什么吗... 这段代码来自雄辩的javascript,效果很好

function sum(array) {
  let total = 0;
  for (let value of array) {
    total += value;
  }
  return total;
}

这是我为练习编写的内容,但返回NaN。

function sum(numArray) { 
  let add = 0;
  for (let a = 0; a <= numArray.length; a++) {
  let addIndex = numArray[a];
    add += addIndex;
  } 
  return add;
}

5 个答案:

答案 0 :(得分:4)

您的for循环不在数组索引中。您必须使用:

a < numArray.length

代替:

a <= numArray.length

答案 1 :(得分:0)

您只需将undefined添加到add,因为您将索引计数设置为long。

for (let a = 0; a <= numArray.length; a++) {
//                 ^                         wrong, takes last index + 1

function sum(numArray) { 
  let add = 0;
  for (let a = 0; a < numArray.length; a++) {
    let Addindex = numArray[a];
    add += Addindex;
  } 
  return add;
}

console.log(sum([1, 2, 3, 4]));

答案 2 :(得分:0)

问题是由于a <= numArray.length造成的。将其更改为a < numArray.length。由于数组从0索引开始,因此未定义第6个元素或第5个索引的元素a [5]的情况。因此它将添加一个具有先前添加的数字的undefined,因此它将是NaN

function sum(numArray) {
  let add = 0;
  for (let a = 0; a < numArray.length; a++) {
    let Addindex = numArray[a];
    add += Addindex;
  }
  return add;
}

console.log(sum([1, 2, 3, 4, 5]))

答案 3 :(得分:0)

您收到越界错误。在您的for循环中,您可以将其更改为:

for (let a = 0; a < numArray.length; a++) {

OR

for (let a = 0; a <= numArray.length - 1; a++) {

后者也可以,但是很难阅读。

答案 4 :(得分:0)

您还可以编写一个具有两个参数的函数,一个数组和一个将数组值相加的回调函数,如

function forEach(array, arrayAdder){
    for (var i = 0; i < array.length; i ++)
    arrayAdder(array[i]) ;
}

我们现在可以像这样初始化数组和总和

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], sum = 0;

之后,我们将其传递给这样的函数

forEach(array, function(number){
    sum += number ;
});

然后打印答案

console.log(sum);