问题描述
我从数据库收到一个json响应,如下所示:
"gradings": [
{
"gradingId": 1,"enrollment": {
"enrollmentId": 1,"rollNo": "1PC-1"
},"grade": {
"name": "B-"
}
},{
"gradingId": 2,"grade": {
"name": "A+"
}
},{
"gradingId": 3,"enrollment": {
"enrollmentId": 2,"rollNo": "1PC-2"
},"grade": {
"name": "C-"
}
},{
"gradingId": 4,"grade": {
"name": "C-"
}
}
]
我需要的是将上方对象转换为下方结构:
我想在一个数组中为相同的 enrollmentId 分组成绩。
"gradings": [
{
enrollmentId: 1,rollNo: "1PC-1",grades: [B-,A+]
},{
enrollmentId: 2,rollNo: "1PC-2",grades: [C-,C-]
}
]
我没有找到满足要求的合适解决方案,我也在搜索lodash。
我该怎么办?我该如何实现?谢谢。
解决方法
您应按enrollmentId
对成绩进行分组,有一个存储唯一入学申请的数组,map
贯穿该数组,然后补充该入学成绩
以下解决方案(适用于Vanilla js)可以为您提供帮助
const { gradings } = {
gradings: [
{
gradingId: 1,enrollment: {
enrollmentId: 1,rollNo: "1PC-1",},grade: {
name: "B-",{
gradingId: 2,grade: {
name: "A+",{
gradingId: 3,enrollment: {
enrollmentId: 2,rollNo: "1PC-2",grade: {
name: "C-",{
gradingId: 4,],}
const enrollmentById = {}
const gradesByEnrollmentId = {}
gradings.forEach((grading) => {
if (!gradesByEnrollmentId[grading.enrollment.enrollmentId]) {
gradesByEnrollmentId[grading.enrollment.enrollmentId] = [grading.grade.name]
} else {
gradesByEnrollmentId[grading.enrollment.enrollmentId].push(grading.grade.name)
}
if (!enrollmentById[grading.enrollment.enrollmentId]) {
enrollmentById[grading.enrollment.enrollmentId] = { ...grading.enrollment }
}
})
const res = {
gradings: Object.values(enrollmentById).map((enrollment) => ({
...enrollment,grades: gradesByEnrollmentId[enrollment.enrollmentId],})),}
console.log(res)