javascript - 如何格式化 JSON 对象数组(Javascript)
问题描述
我正在为一个我不知道如何处理的苛刻要求而苦苦挣扎
我收到了一个数组,如下所示:
[{
"student": "21_A_1",
"sport": "badminton"
}, {
"student": "21_C_1",
"sport": "badminton"
}, {
"student": "21_A_2",
"sport": "badminton"
}, {
"student": "21_B_1",
"sport": "football"
}, {
"student": "21_A_2",
"sport": "football"
}]
要求:将其转换为具有格式的数组:
[{
"student": "21_A_1",
"sport": ["badminton"]
}, {
"student": "21_C_1",
"sport": ["badminton"]
}, {
"student": "21_A_2",
"sport": ["badminton","football"]
}, {
"student": "21_B_1",
"sport": ["football"]
}]
我发现lodash库有一个功能“group by”返回了非常封闭的结果,但并不像预期的那样:
_.groupBy(array, 'student');
结果:
{
"21_A_1": [{
"student": "21_A_1",
"sport": "badminton"
}],
"21_C_1": [{
"student": "21_C_1",
"sport": "badminton"
}],
"21_A_2": [{
"student": "21_A_2",
"sport": "badminton"
}, {
"student": "21_A_2",
"sport": "football"
}],
"21_B_1": [{
"student": "21_B_1",
"sport": "football"
}]
}
任何建议都非常感谢。
解决方案
我们可以使用数组的'.reduce'函数和聚合结果如下
var test = [{
"student": "21_A_1",
"sport": "badminton"
}, {
"student": "21_C_1",
"sport": "badminton"
}, {
"student": "21_A_2",
"sport": "badminton"
}, {
"student": "21_B_1",
"sport": "football"
}, {
"student": "21_A_2",
"sport": "football"
}]
const result = test.reduce((res,x)=>{
res[x.student] = res[x.student] || { student:x.student,sport:[]}
res[x.student].sport.push(x.sport)
return res;
},{})
console.log(result)
推荐阅读
- postgresql - PostgreSQL:在触发器的函数中检查 NEW 和 OLD
- scala - 列表上的模式匹配以检查是否为空
- angularjs - 将数据从子组件传递给父组件并返回
- jenkins - 如何在詹金斯管道中获取输入步骤输出
- python - 使用多个类实例并行化 pandas
- node.js - RobinBuschmann/soap-typescript/soap-decorators 示例
- amazon-web-services - AWS Lambda 服务的用户验证异常
- python - 如何将熊猫数据框单行拆分为两行?
- algorithm - 计算时间序列中的周期
- android - 如何预测 Google Text-to-Speech 的失败?