Добавление процента от общей суммы к результату
Мне нужна помощь по поводу этой функции:
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%"
]