javascript - 根据现有响应创建新的 json 响应
问题描述
我有 json 响应,其值为 week1、week2、week3、week4 在 week 键中以及基于类别(meetingHash)和 week wise 的计数。我尝试与 .reduce 合并但没有运气。
如果我有week1 and week2
for in ,meetingHash 'Hold/Uncategorized'
现在为用户创建 2 行。user Sarathy Devaraju
month may
但我想合并为 { meetingHash: "Hold/Uncategorized", month: "May", UserName: "Sarathy Devaraju", Week1: 2, Week2: 0, Week3: 3, Week4: 0 }
预计为
[{"UserName":"Sarathy Devaraju","month":"May","meetingHash":"Hold/Uncategorized","Week1":2,"Week2":0,"Week3":3,"Week4":0},
{"UserName":"Priya","month":"May","meetingHash":"Hold/Uncategorized","Week1":2,"Week2":0,"Week3":0,"Week4":0},
{"UserName":"Sarathy Devaraju","month":"May","meetingHash":"1st Presentation / Meeting","Week1":0,"Week2":1,"Week3":0,"Week4":0},
{"UserName":"Priya","month":"May","meetingHash":"1st Presentation / Meeting","Week1":0,"Week2":1,"Week3":0,"Week4":0},
{"UserName":"Sarathy Devaraju","month":"Jun","meetingHash":"1st Presentation / Meeting","Week1":0,"Week2":1,"Week3":0,"Week4":0},
{"UserName":"Priya","month":"Jun","meetingHash":"1st Presentation / Meeting","Week1":0,"Week2":1,"Week3":0,"Week4":0},
{"UserName":"Sarathy Devaraju","month":"Jun","meetingHash":"Follow-On Meetings","Week1":1,"Week2":0,"Week3":0,"Week4":0},
{"UserName":"Priya","month":"Jun","meetingHash":"Follow-On Meetings","Week1":1,"Week2":0,"Week3":0,"Week4":0},
{"UserName":"Sarathy Devaraju","month":"Jul","meetingHash":"Follow-On Meetings","Week1":0,"Week2":0,"Week3":1,"Week4":0},
{"UserName":"Sarathy Devaraju","month":"Jul","meetingHash":"Follow-On Meetings","Week1":1,"Week2":0,"Week3":0,"Week4":0},
]
const data = [
{
"UserName": "Sarathy Devaraju",
"week": "Week 1",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 2
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 3
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "May",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 3",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "July",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 2
},
{
"UserName": "Priya",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "May",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "July",
"count": 1
}
];
const WEEKS = ["Week 1", "Week 2", "Week 3", "Week 4"];
const result = data.map(obj => {
return {
UserName: obj.UserName,
month: obj.monthinwords,
meetingHash: obj.MeetingHash,
Week1: WEEKS.indexOf(obj.week) == 0 ? obj.count : 0,
Week2: WEEKS.indexOf(obj.week) == 1 ? obj.count : 0,
Week3: WEEKS.indexOf(obj.week) == 2 ? obj.count : 0,
Week4: WEEKS.indexOf(obj.week) == 3 ? obj.count : 0,
}
}
);
console.log(result);
解决方案
const data = [
{
"UserName": "Sarathy Devaraju",
"week": "Week 1",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 2
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 3
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "May",
"count": 1
},
{
"UserName": "Sarathy Devaraju",
"week": "Week 3",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "July",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Hold/Uncategorized",
"monthinwords": "May",
"count": 2
},
{
"UserName": "Priya",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "Jun",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 2",
"MeetingHash": "1st Presentation / Meeting",
"monthinwords": "May",
"count": 1
},
{
"UserName": "Priya",
"week": "Week 1",
"MeetingHash": "Follow-On Meetings",
"monthinwords": "July",
"count": 1
}
];
const item = {}
data.forEach(obj => {
const key =`${obj.MeetingHash}_${obj.UserName}_${obj.monthinwords}`
if(!item[key]) {
item[key] = {
"Week 1": 0,
"Week 2": 0,
"Week 3": 0,
"Week 4": 0,
}
}
item[key]["UserName"] = obj.UserName
item[key]["meetingHash"] = obj.MeetingHash
item[key]["month"] = obj.monthinwords
item[key][obj.week] = obj.count
}
);
const temp = []
Object.keys(item).forEach(record => {
temp.push(item[record])
})
console.log(temp)
推荐阅读
- arrays - 想要从每个数组数组中找到最大值
- vue.js - Vuejs:如何循环开始时间以将结束时间与var x相乘
- apache-kafka - Kafka 测试容器未运行
- web3 - AttributeError:模块“web3.geth”没有属性“txpool”
- jquery - 当 tablesorter 表显示最后一行时触发显示隐藏的 div
- javascript - 为什么在确定对象类型时 instanceof 运算符比构造函数属性更安全?
- javascript - Nuxt JS Vuex设置数据在加载页面时没有实时反映
- sql - 在 2 个单独的列中选择带有日期范围和单个日期的查询
- c++ - 修剪 std::string 和 std::wstring
- node.js - pm2 内存使用和进程数不断上升