[英]How can I group array data in object using lodash javascript
[英]group and array of object data javascript
所以我有一個來自 mongodb 查詢的 object 數組,如下所示,它包含來自 $agg 的值:
[
{
"_id": "17000691",
"latestAnswer": [
{
"title": "Test",
"date": "2022-11-16",
"position": "Foreman",
"department": "Production",
"username": "17000691"
}
]
},
{
"_id": "MT220047",
"latestAnswer": [
{
"title": "Test",
"date": "2022-11-15",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Test",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Test",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Untitled Form1",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
}
]
}
]
有沒有一種方法可以根據日期、標題和用戶名對數據庫進行分組?
[
{
"username": "MT220047",
"title": "Test",
"position": "Management Trainee",
"department": "Logistic",
"2022-11-15": 1,
"2022-11-16": 2
},
{
"username": MT220047,
"title": UntitledForm1,
"position": "Management Trainee",
"department": "Logistic",
"2022-11-16": 1
},
{
"username": 17000691,
"title": Test,
"position": "Foreman",
"department": "Production",
"2022-11-16": 1,
}
]
對此的任何幫助都會對我有用...謝謝..,它嘗試對其進行映射,但似乎對按照我的意願對其進行分組的邏輯感到困惑
這樣的事情可以工作嗎?
const payload = [
{
"_id": "17000691",
"latestAnswer": [
{
"title": "Test",
"date": "2022-11-16",
"position": "Foreman",
"department": "Production",
"username": "17000691"
}
]
},
{
"_id": "MT220047",
"latestAnswer": [
{
"title": "Test",
"date": "2022-11-15",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Test",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Test",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
},
{
"title": "Untitled Form1",
"date": "2022-11-16",
"position": "Management Trainee",
"department": "Logistic",
"username": "MT220047"
}
]
}
]
const accumulator = {};
const final = []
const res = payload
.map((payload) => payload.latestAnswer)
.reduce((acc, curr) => { acc.push(...curr); return acc}, []);
res.forEach((item) => {
const {username, title, position, department, date} = item
const key = `${username}-${department}-${position}-${title}`
accumulator[key] = accumulator[key] || {};
accumulator[key][date] = accumulator[key][date] + 1 || 1
})
Object.keys(accumulator).forEach((item) => {
const [username, department, position, title] = item.split('-')
final.push({
username,
department,
position,
title,
...accumulator[item]
})
})
當然可以改進,但你應該得到算法的精神。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.