无论三个类别(DEA,ISA,SIPP)指定的帐户类型如何,我都需要按月创建一个新的付款分组数组
我的数据的格式为
var arr = [
{ 'DEA','1', 'Jan',1266 },
{ 'ISA','1', 'Jan',621 },
{ 'SIPP','1', 'Jan',552 },
{ 'DEA','2', 'Feb',889 },
{ 'ISA','2', 'Feb',921 },
{ 'SIPP','2', 'Feb',901 },
];
月份1或2等是冗余数据,即。我的输出中不需要
我需要按以下格式按月将付款分组到新的数组中:
var newarr =
[
{ 'Jan',2439 },
{ 'Feb',2711 },
];
我已使用以下代码作为起点,该代码按年龄类别分组并汇总了TOTAL,但是我仍无法成功将其应用于数据
var arr = [
{ AGENDADOR: 'AGE270', TOTAL : 6},
{ AGENDADOR: 'AGE270', TOTAL : 3},
{ AGENDADOR: 'AGE203', TOTAL : 5},
{ AGENDADOR: 'AGE028', TOTAL : 9},
];
var totals = arr.reduce(function (r, o) {
(r[o.AGENDADOR])? r[o.AGENDADOR] += o.TOTAL : r[o.AGENDADOR] = o.TOTAL;
return r;
}, {});
console.log(totals);
非常感谢您帮助我入门,
非常感谢
科林
答案 0 :(得分:1)
为了汇总月份,另一种方法是维护一个月份数组,用于循环并提取您需要求和的值。
基本上,函数reduce
按月对值进行分组,而函数Object.values
将分组后的值提取为数组。
这种方法将提取对象中显示的所有月份。
let months = ['Jan', 'Feb', 'Mar'];// and so on.
let arr = [ { 'DEA':'1', 'Jan':1266 }, { 'ISA':'1', 'Jan':621 }, { 'SIPP':'1', 'Jan':552 }, { 'DEA':'2', 'Feb':889 }, { 'ISA':'2', 'Feb':921 }, { 'SIPP':'2', 'Feb':901 } ];
let result = Object.values(arr.reduce((a, c) => {
months.forEach(m => {
if (m in c) (a[m] || (a[m] = {[m]: 0}))[m] += c[m];
});
return a;
}, Object.create(null)));
console.log(result);
.as-console-wrapper { min-height: 100%; }