试图创建一个对数字求和的Javascript函数

Trying to create a Javascript function that sums up numbers

本文关键字:数字 求和 和的 函数 Javascript 一个 创建      更新时间:2023-09-26

我对Javascript非常陌生,我正在尝试编写一个求和数字的函数。下面的函数返回"0"而不是总和(我不知道为什么(。

function sumTo(N) {
  var total = 0
  for (var i = 0; i < N.length; i++) {
  total = total + N[i];
 }
 return total;
 };
 console.log(sumTo(1,2,3,4,5));

您正试图从一个数字(传递给函数的第一个数字;示例中为1(中获取length。数字没有长度,所以得到undefined,而0 < undefined为false,所以循环永远不会运行。

任一:

  1. 数组传递到sumTo

    console.log(sumTo([1, 2, 3, 4, 5]);
    // Note ----------^-------------^
    

  2. 使用arguments自动局部变量

    for (var i = 0; i < arguments.length ++i) {
        total += arguments[i];
    }
    

  3. 使用ES2015的"rest"参数:

    // ES2015+ only!
    function sumTo(...values) {
       let total = 0;
       for (let i = 0; i < values.length; ++i) {
           total += values[i];
       }
       return total;
    }
    

    由于您在ES2015中,因此可以使用带有箭头函数的reduce(求和是reduce的完美用例(:

    // ES2015+ only!
    function sumTo(...values) {
       let total = values.reduce((a, b) => a + b);
       return total;
    }
    

    或者for-of,ES2015的另一个东西:

    // ES2015+ only!
    function sumTo(...values) {
       let total = 0;
       for (let value of total) {
           total += value;
       }
       return total;
    }
    

这是因为N只是第一个参数,在本例中是11没有索引,因此N[1]不起作用。

您需要的是传入一个数组,因为您期望N具有length

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

您需要一个数字数组,或者使用arguments对象。

function sumTo(N) {
    var total = 0
    for (var i = 0; i < N.length; i++) {
        total = total + N[i];
    }
    return total;
}
console.log(sumTo([1, 2, 3, 4, 5]));

带参数

function sumTo(N) {
    var total = 0
    for (var i = 0; i < arguments.length; i++) {
        total = total + arguments[i];
    }
    return total;
}
console.log(sumTo(1, 2, 3, 4, 5));

使用ES6,可以使用rest参数...

function sumTo(...N) {
    var total = 0
    for (var i = 0; i < N.length; i++) {
        total = total + N[i];
    }
    return total;
}
console.log(sumTo(1, 2, 3, 4, 5));

您也可以使用reduce方法:

var sumTo = ar => ar.reduce((a,b) => a+b);
console.log(sumTo([1, 2, 3, 4, 5])); // 15

如前所述,您应该在数组中发送值:

function sumTo(N) {
  var total = 0
  for (var i = 0; i < N.length; i++) {
    total = total + N[i];
  }
  return total;
};
console.log(sumTo([1, 2, 3, 4, 5]));

作为替代方案,您可以使用Array.reduce

function sumTo(N) {
  return N.reduce(function(p,c){
    return p+c
  })
};
console.log(sumTo([1, 2, 3, 4, 5]));