Добавление процента от общей суммы к результату

Мне нужна помощь по поводу этой функции:

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

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%"
]
Другие вопросы по тегам