试图创建一个总结数字的Javascript函数

时间:2016-10-14 13:56:23

标签: javascript

我是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));

5 个答案:

答案 0 :(得分:5)

您正试图从一个号码(您传递给您的函数的第一个号码; length中的1)获取undefined。数字没有长度,因此您获得0 < undefined,而sumTo为false,因此您的循环永远不会运行。

或者:

  1. 数组传递到console.log(sumTo([1, 2, 3, 4, 5]); // Note ----------^-------------^

    arguments

  2. 使用for (var i = 0; i < arguments.length ++i) { total += arguments[i]; } 自动本地变量

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

  3. 使用ES2015&#34;休息&#34;参数:

    reduce

    由于您当时在ES2015中,您可以使用带有箭头功能的reduce(总和是// ES2015+ only! function sumTo(...values) { let total = values.reduce((a, b) => a + b); return total; } 的完美用例):

    for-of

    // ES2015+ only! function sumTo(...values) { let total = 0; for (let value of total) { total += value; } return total; } ,另一个ES2015事情:

    IF len(to_tx.EMAIL) > 0 then 'Y' ELSE 'N'
    

答案 1 :(得分:2)

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

您需要传递一个数组,因为您希望N拥有length

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

答案 2 :(得分:2)

您需要数字数组,或使用arguments object

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 parameter ...

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));

答案 3 :(得分:1)

您也可以使用reduce方法:

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

答案 4 :(得分:1)

如评论所述,您应该在数组中发送您的值:

&#13;
&#13;
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]));
&#13;
&#13;
&#13;

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

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