【问题标题】:calculate rating score to number计算评分分数
【发布时间】:2016-12-11 18:36:50
【问题描述】:

我有 5 颗星,每次用户可以选择从 1 到 5 进行评分。所以我有这样的分数数组

stars = [0,0,2,3,5] // 我在数据库中有这个

2个用户给了3星,3个用户给了4星,5个用户给了5星,但是我如何计算分数以显示在客户端?

【问题讨论】:

  • 聚合你的星星数组并计算平均值。

标签: javascript jquery angularjs algorithm


【解决方案1】:

您可以将加权值相加并除以评分数。

var stars = [0, 0, 2, 3, 5],
    count = 0,
    sum = stars.reduce(function (sum, item, index) {
        count += item;
        return sum + item * (index + 1);
    }, 0);
   
console.log(sum / count);

【讨论】:

  • 结果应该是 4.3,而不是 3.3 ...它说 2 个用户给 3 星,3 个用户给 4 星,5 个用户给 5 星
  • 好吧,不再... +1
  • “功能性是新的蓝牙”,每个人都知道"everything's better with bluetooth"weighted average 有什么问题 - 这个概念需要避开当时的编程噱头吗?
  • @AdrianColomitchi,对不起,你是什么意思?
  • "对不起,你什么意思?"嗯,我猜是脾气暴躁的老人。答案的“罪过”(否则是正确的......嗯...... ed):使用函数方法(当一个简单的循环可以做到时,将一个函数映射到元素上),使用一个字母的变量名称(必须要做的事情:什么地狱是rai?),没有解释其中哪些充当“权重”,哪些是要平均的元素(我对需要更正的答案并不感到惊讶)。 OP 是否会自己与加权平均值建立联系,他不会问...但是她/他会收到一条像魔术一样工作的高级烹饪鱼,而不是钓鱼课。
【解决方案2】:

另一个同样有效但可能更容易理解的解决方案。

var stars = [0, 0, 2, 3, 5],
    count = 0,
    sum = 0;

stars.forEach(function(value, index){
  count += value;
  sum += value * (index + 1);
});

console.log(sum / count);

【讨论】:

    【解决方案3】:

    这是适合您的完整解决方案..如果不起作用,请发表评论..

    HTML

    <p id="demo"></p>
    

    Javascript

    <script type="text/javascript">
    stars = [0,0,2,3,5]
    
    var sum = stars.reduce(add, 0);
    function add(a, b) {
        return a + b;
    }
    var text='';
    
     for (i = 0; i < stars.length; i++) { 
      text += "The percentege of the star "+(i+1)+ " is :"+ (stars[i]/sum)*100 + "<br>";
    }
    document.getElementById("demo").innerHTML = text;
    </script>
    

    关注这里...https://jsfiddle.net/zoux6v1x/1/了解详情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-12
      • 2018-01-04
      • 2020-10-14
      • 2013-07-31
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多