2014-10-30 125 views
0

我需要帮助这个功能:增加总的百分比结果

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%] 

回答

0

那么,你就必须计算总。使用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%" 
]