【问题标题】:Calculate the average for an arbitrary number of arguments计算任意数量参数的平均值
【发布时间】:2015-06-20 14:44:38
【问题描述】:

我正在尝试计算一个函数,该函数将返回多个整数参数的平均值。谁能帮忙?

var Calculator = {
  average: function(x) {
    var num = 0;
    for (var i = 1; i <= x.length; i++) 
    num = num + x[i];
    var divide = num/x.length;
    return divide;
 }
};

当我运行这段代码时,我得到了 NaN。

这里是小提琴:http://jsfiddle.net/marcusdei/hsvr8va5/6/

--------> 更新:不是重复的问题或答案

过去的答案不支持长浮点数。

【问题讨论】:

标签: javascript numbers average


【解决方案1】:

您可以在函数内部使用 JavaScript 的 arguments 来处理任意数量的参数。

 
 var Calculator = {
  average: function() {
    var num = 0,length=arguments.length;
    if(!length) return 0;
    for (var i = 0; i < length; i++) 
            num = num + arguments[i];
    var divide = num/length;
    return divide;
 }
};

document.getElementById('choice').innerHTML = Calculator.average(3,4,5);
    <div id="choice"></div>

<div id="hidden">

</div>

更新小提琴:http://jsfiddle.net/vikashvverma/hsvr8va5/11/

【讨论】:

  • 如果没有传入参数,我也需要返回0。
  • 好吧,我明白了: if (arguments.length === 0) { return 0; }
【解决方案2】:

您的迭代器也存在问题。您超出了数组的末尾,即 NaN。

这使它正常运行:

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

在这里,我更新了你的小提琴:http://jsfiddle.net/hsvr8va5/10/

很高兴回答您对迭代器问题的具体问题。

【讨论】:

    【解决方案3】:

    您的循环使用了不正确的开始值和结束条件。此外,必须使用数组作为参数调用该函数。代码应如下所示:

    var Calculator = {
      average: function(x) {
        var num = 0;
        for (var i = 0; i < x.length; i++) 
            num = num + x[i];
        var divide = num/x.length;
        return divide;
     }
    };
    
    document.getElementById('choice').innerHTML = Calculator.average([3,4,5]);
    

    【讨论】:

      【解决方案4】:

      您的代码很好,除了您在 for 循环中迭代的部分,这是您的代码

      var Calculator = {
        average: function(x) {
          var num = 0;
          for (var i = 0; i < x.length; i++) 
          num = num + x[i];
          var divide = num/x.length;
          return divide;
       }
      };
      

      您必须注意Loop Invariants。循环受制于香蕉问题(我知道如何拼写,但我不知道何时停止)。 JavaScript 是零索引的!

      【讨论】:

        【解决方案5】:

        X 应该是一个数组。如果要支持可变数量的参数,则需要遍历“参数”。这是一个神奇的数组,包含调用函数时使用的所有参数。

        此外,数组索引从 0 开始,以长度 1 结束。您的版本在开始时跳过了第一个数字,并在最后超出了范围。这导致最后添加为 num = num + undefined = NaN

        function() {
            var num = 0,
                x = arguments;
            for (var i = 0; i < x.length; i++) 
            num = num + x[i];
            var divide = num/x.length;
            return divide;
         }
        

        小提琴:http://jsfiddle.net/hsvr8va5/12/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-31
          • 1970-01-01
          • 2013-10-25
          • 1970-01-01
          • 2017-09-26
          相关资源
          最近更新 更多