Sha*_*esh 9 javascript arrays json underscore.js
我有一个json数组对象.我想根据列"FlexCategoryName"对数据进行分组,并对矩阵列执行聚合,例如"成本"平均值,"点击"总和等.下面是JSON数组对象
Array[100]
0: Object
1: Object
2: Object
3: Object
Run Code Online (Sandbox Code Playgroud)
0:对象
Clicks: 1067
Cost: 4094.2
Date: "2/8/2014"
FlexCategoryName: "Cat1"
Impressions: 65943
Leads: 20
Run Code Online (Sandbox Code Playgroud)
VENUE_ID:1
1:对象
Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat2"
Impressions: 65941
Leads: 21
VENUE_ID:1
Run Code Online (Sandbox Code Playgroud)
2:对象
Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat2"
Impressions: 10
Leads: 21
VENUE_ID:2
Run Code Online (Sandbox Code Playgroud)
3:对象
Clicks: 106
Cost: 409
Date: "2/8/2014"
FlexCategoryName: "Cat3"
Impressions: 10
Leads: 21
VENUE_ID:2
Run Code Online (Sandbox Code Playgroud)
4:对象
Clicks: 20
Cost: 10
Date: "2/8/2014"
FlexCategoryName: "Cat5"
Impressions: 10
Leads: 21
VENUE_ID:3
Run Code Online (Sandbox Code Playgroud)
如何使用Underscore JS对矩阵列执行分组和聚合.
预期产出
0: Object
Cost: sum of all cost based on FlexCategoryName Cat1
FlexCategoryName: "Cat1"
Impressions: sum of all Impressions based on FlexCategoryName Cat1
1: Object
Cost: sum of all cost based on FlexCategoryName Cat2
FlexCategoryName: "Cat2"
Impressions: sum of all Impressions based on FlexCategoryName Cat2
Run Code Online (Sandbox Code Playgroud)
the*_*eye 27
var _ = require("underscore");
function sum(numbers) {
return _.reduce(numbers, function(result, current) {
return result + parseFloat(current);
}, 0);
}
var result = _.chain(data)
.groupBy("FlexCategoryName")
.map(function(value, key) {
return {
FlexCategoryName: key,
Cost: sum(_.pluck(value, "Cost")),
Impressions: sum(_.pluck(value, "Impressions"))
}
})
.value();
console.log(result);
Run Code Online (Sandbox Code Playgroud)
产量
[ { FlexCategoryName: 'Cat1', Cost: 4094.2, Impressions: 65943 },
{ FlexCategoryName: 'Cat2', Cost: 818, Impressions: 65951 },
{ FlexCategoryName: 'Cat3', Cost: 409, Impressions: 10 },
{ FlexCategoryName: 'Cat5', Cost: 10, Impressions: 10 } ]
Run Code Online (Sandbox Code Playgroud)
如果要查找平均值而不是求和,则只需更改函数即可.
编辑:如果要基于多个字段进行分组,可以像这样嵌套分组
var result = _.chain(data)
.groupBy("FlexCategoryName")
.map(function(value, key) {
return _.chain(value)
.groupBy("VENUE_ID")
.map(function(value1, venue_id) {
return {
FlexCategoryName: key,
Cost: sum(_.pluck(value1, "Cost")),
Impressions: sum(_.pluck(value1, "Impressions")),
VENUE_ID: venue_id
}
})
.value();
})
.value();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16914 次 |
| 最近记录: |