【问题标题】:Calculate the average of points in a array - Javascript计算数组中点的平均值 - Javascript
【发布时间】:2013-08-29 09:43:15
【问题描述】:

我有一个包含一组人信息的数组:姓名、当前状态、新点、上次事件点

例子:

var group = new Array();
group[0] = "John Doe,beginer,14,7";
group[1] = "Lois Lane,advanced,13,9";
group[2] = "Bruce Waine,advanced,17,10";

我需要一个计算新点平均值的函数。

对于前面的示例,平均值为 (14+13+17)/3 = 14.66666666666667

【问题讨论】:

  • 您将值存储在字符串中是否有原因?您可以使用 JSON 让自己的生活更轻松。
  • 不是布鲁斯韦恩吗?

标签: javascript arrays


【解决方案1】:

如果您将数组中的数据从字符串转换为对象,那会容易得多。这将在两个方面使您受益:1) 代码将更易读、更易于理解且更易于维护,并且2)你不必做一堆字符串体操来提取相关数据。

做这样的事情:

var group = [
  { name: 'John Doe', status: 'beginner', newPoints: 14, eventPoints: 7 },
  { name: 'Lois Lane', status: 'advanced', newPoints: 13, eventPoints: 9 },
  { name: 'Bruce Waine', status: 'advanced', newPoints: 17, eventPoints: 10 }
];

function getAverageNewPoints(people) {
  var count = people.length || 0,
      average = 0;

  for (var i = 0; i < count; i++) {
    average += people[i].newPoints;
  }

  return average / count;
}

alert('The average of new points in the group is: ' + getAverageNewPoints(group));

【讨论】:

    【解决方案2】:

    尝试以下方法:

    function groupAverage(group) {
        var sum = 0;
        var count = group.length;
    
        for (var i in group) {
            sum += parseInt(group[i].split(',')[2], 10);
        }
    
        return sum / count;
    }
    

    【讨论】:

    • 不要忘记 parseInt(group[i]..., 10) 中的基数参数;
    • @Rick - 好的,那么你建议以下做什么呢? var count = group.length;
    • 你是对的,但是当我发表我的评论时,它并不在那里。
    • 不好。您不应该在数组上使用for (prop in object) {}Reference on the in operator
    【解决方案3】:

    在 处拆分字符串,并获取值并将它们转换为数字。

    var group = new Array();
     group[0] = "John Doe,beginer,14,7";
     group[1] = "Lois Lane,advanced,13,9";
     group[2] = "Bruce Waine,advanced,17,10";
    sum=0;
    
    for(var i in group)
    {
        sum=sum+Number(group[i].split(",")[2]);
    
    }
    
    console.log(sum/group.length);  
    

    【讨论】:

    • 这对于数组增长/任意数量的条目使用for循环没有用,就像提交的第一个答案一样。
    • 它现在已更改,考虑到任意大小的数组。我打算提供解决方案的基本思想,这就是为什么我没有考虑数组会增长的情况,因为我认为这是显而易见的。
    【解决方案4】:

    你有一个糟糕的数据结构。你不想使用字符串。您也不应该使用Array 构造函数。开始:

    var group = [
        {name: "John Doe",    rank: "beginner", points: 14, lastScore: 7},
        {name: "Lois Lane",   rank: "advanced", points: 13, lastScore: 9},
        {name: "Bruce Wayne", rank: "advanced", points: 17, lastScore: 10},
    ],
    length = group.length,
    sum = 0,
    i;
    
    for ( i = 0; i < length; ++i) {
        sum += group[i].points;
    }
    
    return sum / length; // Or do something else with the result.
                         // I did no error checking.
    

    您可以使用对象构造函数来代替我使用的内联Object,但这并不是必需的。我只是好奇;您是默认使用字符串,还是使用教科书作业的字符串接口部分?

    哦,使用[] 而不是new Array() 的一个原因是,当您构造Array 时,其值始终为真,而[] 为假。

    我确实冒昧地更正了布鲁斯的姓氏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多