【问题标题】:Calculating the average of object properties in array计算数组中对象属性的平均值
【发布时间】:2014-09-19 09:21:51
【问题描述】:

我正在尝试计算一周的平均温度,但我不太清楚该怎么做。我已经尝试了一些东西,但最终结果将是“NaN”或“Infinity”。这里肯定做错了..

这是我需要使用的代码:

var temperatures;

temperatures = new Array();

temperatures["monday"] = 23.5;
temperatures["tuesday"] = 22.3;
temperatures["wednesday"] = 28.5;
temperatures["thursday"] = 23.5;
temperatures["friday"] = 22.3;
temperatures["saturday"] = 28.5;
temperatures["sunday"] = 29.5;

当数组像 [0]、[1] 而不是包含日期的字符串时,我让它工作了,但我不知道如何像上面那样做。此外,如果您有任何建议,请尽量保持代码基本,因为令人惊讶的是,由于某种原因,在我的课堂上并不太喜欢“高级代码”。

感谢阅读。

【问题讨论】:

标签: javascript arrays average


【解决方案1】:

平均值只是总数除以温度数

var temperatures = {},
    length = 0,
    total  = 0;

temperatures["monday"] = 23.5;
temperatures["tuesday"] = 22.3;
temperatures["wednesday"] = 28.5;
temperatures["thursday"] = 23.5;
temperatures["friday"] = 22.3;
temperatures["saturday"] = 28.5;
temperatures["sunday"] = 29.5;

for (var day in temperatures) {
    total += temperatures[day];
    length++;
}

var average = total / length;

请注意,数组没有命名键,只有对象有

【讨论】:

  • day 现在不是全局变量了吗? (我不确定 - 这正是我的 Netbeans 代码高亮显示的内容)如果是这样,将其与其他变量一起声明不是更好吗?
  • @Cold_Class - 好眼力,只需在 for 循环中声明它即可解决。
【解决方案2】:

我相信遍历会给你带来问题。这是解决方案

DEMO

var count=0,total=0;
for(t in temperatures)
{
    total = total+temperatures[t]
    count++;
}
alert(total/count);//average

【讨论】:

    【解决方案3】:

    试试:

     var temperatures;
        var sum = 0,
            count = 0;
        temperatures = new Array();
        
        temperatures["monday"] = 23.5;
        temperatures["tuesday"] = 22.3;
        temperatures["wednesday"] = 28.5;
        temperatures["thursday"] = 23.5;
        temperatures["friday"] = 22.3;
        temperatures["saturday"] = 28.5;
        temperatures["sunday"] = 29.5;
        
        for (var prop in temperatures) {
            if (temperatures.hasOwnProperty(prop)) {
                count++;
                sum += temperatures[prop];
            }
        }
    
        var average = (sum / count);
        alert(average);

    【讨论】:

      【解决方案4】:

      如果你想要键值对,你应该尝试使用 Object 而不是 Array。

      var temperatures;
      
      temperatures = new Object();
      
      temperatures["monday"] = 23.5;
      temperatures["tuesday"] = 22.3;
      temperatures["wednesday"] = 28.5;
      temperatures["thursday"] = 23.5;
      temperatures["friday"] = 22.3;
      temperatures["saturday"] = 28.5;
      temperatures["sunday"] = 29.5;
      
      alert(temperatures["sunday"]);
      

      你会得到键值对js对象, 您可以将其用于平均:

      var sum = 0;
      for(key in temperatures)
      {
         sum  = sum+temperatures[key];
         console.log(temperatures[key]);
      }
      alert(sum/7); 
      

      Check this Demo

      【讨论】:

      • 您想要实现的目标。你仔细阅读问题了吗?
      • @Manwal 对不起,没有示例的答案,但我猜提问者想用键而不是索引来访问变量,并做平均。现在我已经用 Demo 更新了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2014-05-14
      相关资源
      最近更新 更多