对象数组中的对象数组在JavaScript中计算总计数
问题描述:
如标题所述,我需要将对象数组推送到分组对象中。我发现这里的例子,它有云:对象数组中的对象数组在JavaScript中计算总计数
function groupBy(array, col, value) {
var r = [], o = {};
array.forEach(function (a) {
if (!o[a[col]]) {
o[a[col]] = {};
o[a[col]][col] = a[col];
o[a[col]][value] = 0;
r.push(o[a[col]]);
}
o[a[col]][value] += +a[value];
});
return r;
};
var data = [{ Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" }, { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" }, { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" }, { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" }, { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }];
document.write('<pre>' + JSON.stringify(groupBy(data, 'Phase', 'Value'), 0, 4) + '</pre>');
我的结果是:
[
{
"Phase": "Phase 1",
"Value": 50
},
{
"Phase": "Phase 2",
"Value": 130
}
]
我想的是,我的组合对象里面对象的数组属性:任务和价值(每任务我想要价值)。
我尝试这样做:
function groupBy(array, col, col2, value) {
var r = [], o = {};
array.forEach(function (a) {
if (!o[a[col]]) {
o[a[col]] = {};
o[a[col]][col] = a[col];
o[a[col]][col2] = a[col2];
o[a[col]][value] = 0;
r.push(o[a[col]]);
}
o[a[col]][value] += +a[value];
});
return r;
};
,并添加 “任务” 的参数,但只有我得到的是:
[
{
"Phase": "Phase 1",
"Task" : "Task 1",
"Value": 50
},
{
"Phase": "Phase 2",
"Task" : "Task 1",
"Value": 130
}
]
感谢您的帮助!
答
您正在使用Phase
和Task
作为散列表中的密钥。所以代码需要像这样改变
function groupBy(array, col, col2, value) {
var r = [],
o = {};
array.forEach(function(a) {
// key is not 'Phase' only, it should combine 'Phase' and 'Task', others are the same.
if (!o[a[col] + a[col2]]) {
o[a[col] + a[col2]] = {};
o[a[col] + a[col2]][col] = a[col];
o[a[col] + a[col2]][col2] = a[col2];
o[a[col] + a[col2]][value] = 0;
r.push(o[a[col] + a[col2]]);
}
o[a[col] + a[col2]][value] += +a[value];
});
return r;
};
结帐here。
谢谢!这清除了我很多! :) –