【问题标题】:Adding the percentage of the total to the result将总数的百分比添加到结果中
【发布时间】:2014-10-30 13:13:12
【问题描述】:

我需要有关此功能的帮助:

var ListFruits = Enumerable.From(data) 
    .GroupBy("$.Fruits", "", "d,v => { Fruits:d,NumberFruits:v.Sum('$.NumberFruits|0')}") 
    .Select(" $.Fruits+ ': ' + $.NumberFruits") 
    .ToArray();
// result is [apple: 2 , banana:5 , orange: 3]

我希望每种水果占总数的百分比

一个函数来做这样的事情(其中total 是所有水果的总和):

var ListFruits = Enumerable.From(data) 
    .GroupBy("$.Fruits", "", "d,v => { Fruits:d,NumberFruits:v.Sum('$.NumberFruits|0')}") 
    .Select(" $.Fruits+ ': ' + $.NumberFruits + 'is' + ($.NumberFruits/total)*100  ") 
    .ToArray();
// result is [apple: 2 is 20% , banana: 5 is 50% , orange: 3 is 30%]

【问题讨论】:

    标签: json linq.js


    【解决方案1】:

    好吧,您必须计算总数。使用Let() 函数可以帮助保持干净。

    var data = [
        { Fruit: 'apple', Count: 2 },
        { Fruit: 'banana', Count: 5 },
        { Fruit: 'orange', Count: 3 }
    ];
    var query = Enumerable.From(data)
        .Let(function (d) {
            var total = d.Sum("$.Count");
            return d.GroupBy("$.Fruit", "$.Count", function (f, g) {
                var sum = g.Sum(),
                    percent = (sum / total) * 100;
                return f + ': ' + sum + ' is ' + percent + '%';
            });
        })
        .ToArray();
    

    这会产生以下数组:

    [
      "apple: 2 is 20%",
      "banana: 5 is 50%",
      "orange: 3 is 30%"
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多