我在这里有一个非常困难的方法。使用此示例数据:
[
{"idClient": 1,"idProject": 8,"sourceLanguage": 26,"targetLanguage": 20,"numItems": 1},
{"idClient": 1,"idProject": 8,"sourceLanguage": 26,"targetLanguage": 65,"numItems": 20},
{"idClient": 1,"idProject": 8,"sourceLanguage": 26,"targetLanguage": 20,"numItems": 3},
{"idClient": 1,"idProject": 1,"sourceLanguage": 26,"targetLanguage": 71,"numItems": 12},
{"idClient": 2,"idProject": 3,"sourceLanguage": 20,"targetLanguage": 65,"numItems": 1}
]
我需要获得倍数:
sum of numItems每个 idClient 的总数。sum of numItems每个 idClient-IdProject 的总数。sum of numItems每个 idClient-IdProject-sourceLanguage 的总数。sum of numItems每个 idClient-IdProject-sourceLanguage-targetLanguage 的总计(这是原始数据)。
示例结果应类似于:
[{
"idClient": 1,
"numItems": 36,
"proyects": [
{
"idProyect": 8,
"numItems": 24,
"sourceLanguages":[
{
"id":26,
"numItems": 21
},
{
"id": 30,
"numItems": 3
}
]
},
{
"idProject": 1,
"numItems": 12,
"sourceLanguages":[{
"id":26,
"numItems": 12,
},
{
"id": 30,
"numItems": 3,
}
]
}]
}]
我有一个简单的函数,可以单独获取前两个总和,然后返回一个对象(idProject从键中删除以获得每个客户端的总数):
const totalPerClient_Project= [...data.reduce((r, o) => {
const key = o.idClient + '-' + o.idProject;
const item = r.get(key) || Object.assign({}, o, {
numItems: 0
});
item.numItems += o.numItems;
return r.set(key, item);
}, new Map).values()];
但我发现很难获得sum由 3 链接的属性。这种方法是否可以使用独特的功能?