我收到一個像這樣的物件陣列
[
{
"payload":{
"correlation":{
"metadata":{
"customerId":"12345",
"project":"Project One"
}
}
}
},
{
"payload":{
"correlation":{
"metadata":{
"customerId":"12345",
"project":"Project Two"
}
}
}
},
{
"payload":{
"correlation":{
"metadata":{
"customerId":"12345",
"project":"Project Two"
}
}
}
},
{
"payload":{
"correlation":{
"metadata":{
"customerId":"54323",
"project":"Project One"
}
}
}
}
]
我要做的是計算每個專案的所有唯一客戶 ID。所以對于上述資料,我希望
Project One: 2
Project Two: 1 //because 12345 is shown twice for Project Two, we only want unique so count it as 1
所以我可以使用地圖進行計數,就像這樣
const lutProjects = new Map();
Object.entries(data).forEach(([key, value]) => {
const project = value?.payload?.correlation?.metadata?.project;
const custId = value?.payload?.correlation?.metadata?.customerId;
lutProjects.set(project, (lutProjects.get(project) || 0) 1);
});
但是,這不會處理每個專案的唯一 ID,因此輸出 2 和 2。
我怎樣才能處理每個專案的唯一 ID?
我創建了一個JSFiddle
謝謝
uj5u.com熱心網友回復:
將reduce 方法與每個專案的唯一 ID 陣列結合使用,然后在這些陣列上使用長度來了解最終計數。
uj5u.com熱心網友回復:
如果您使用as 鍵reduce()創建物件project,并將值作為包含 的陣列customerId,我們可以使用它includes()來檢查這customerId是否已知,如果不知道則僅將其添加到陣列中。
然后,我們可以用一秒鐘reduce()將陣列 ow 更改為陣列customerId的lengththe:
const data = [{"payload":{"correlation":{"metadata":{"customerId":"12345", "project":"Project One"} } } }, {"payload":{"correlation":{"metadata":{"customerId":"12345", "project":"Project Two"} } } }, {"payload":{"correlation":{"metadata":{"customerId":"12345", "project":"Project Two"} } } }, {"payload":{"correlation":{"metadata":{"customerId":"54323", "project":"Project One"} } } } ];
let res = data.reduce((prev, cur) => {
const { customerId, project } = cur.payload.correlation.metadata;
if (!prev[project]) prev[project] = [];
if (!prev[project].includes(customerId)) {
prev[project].push(customerId);
}
return prev;
}, {});
res = Object.keys(res).reduce((prev, cur) => ({ ...prev, [cur]: res[cur].length }), {});
console.log(res);
{
"Project One": 2,
"Project Two": 1
}
uj5u.com熱心網友回復:
您可以嘗試使用以下代碼段快速修復
let data = [{"payload":{"correlation":{"metadata":{"customerId":"12345","project":"Project One"}}}},{"payload":{"correlation":{"metadata":{"customerId":"12345","project":"Project Two"}}}},{"payload":{"correlation":{"metadata":{"customerId":"12345","project":"Project Two"}}}},{"payload":{"correlation":{"metadata":{"customerId":"54323","project":"Project One"}}}}]
data = Array.from(new Set(data.map(f => f.payload.correlation.metadata.project))).map(d => {
return {
[d]: [...new Set(data.filter(f => f.payload.correlation.metadata.project === d).map(c => c.payload.correlation.metadata.customerId))].length
}
});
console.log(data);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475711.html
