如何基于API返回对象列表的唯一term分组创建嵌套列表
按Term分组学生成绩的实现方案
需求说明
从给定的API响应中,将detail数组里的成绩对象按唯一的term(比如「年度考试」「开卷测试1」)分组,生成[[对应term的成绩对象列表], ...]的嵌套结构,方便按学期在表格中展示数据。
处理步骤(以JavaScript为例)
- 先从API响应中提取目标成绩数组:
const scores = apiResponse.data[0].detail; - 使用
reduce方法按term分组:
// 先按term分组为对象(键是term,值是对应成绩数组) const groupedByTermObj = scores.reduce((acc, score) => { const term = score.term; if (!acc[term]) { acc[term] = []; } acc[term].push(score); return acc; }, {}); // 把对象的值转换成嵌套数组,就是最终需要的结构 const groupedScores = Object.values(groupedByTermObj);
分组后的结果
[ [ {"marksObtained":0,"title":"Annual Exams English ( 100 )","term":"Annual Exams","subjectName":"English","maxMarks":100,"minMarks":33,"grade":"D"}, {"marksObtained":22,"title":"Annual Exams Hindi ( 100 )","term":"Annual Exams","subjectName":"Hindi","maxMarks":100,"minMarks":33,"grade":"D"}, {"marksObtained":55,"title":"Annual Exams Marathi ( 100 )","term":"Annual Exams","subjectName":"Marathi","maxMarks":100,"minMarks":33,"grade":"C+"}, {"marksObtained":90,"title":"Annual Exams Gujarati ( 100 )","term":"Annual Exams","subjectName":"Gujarati","maxMarks":100,"minMarks":33,"grade":"A+"} ], [ {"marksObtained":89,"title":"Open Book Test 1 Hindi ( 150 )","term":"Open Book Test 1","subjectName":"Hindi","maxMarks":150,"minMarks":100,"grade":"A"}, {"marksObtained":95,"title":"Open Book Test 1 English ( 100 )","term":"Open Book Test 1","subjectName":"English","maxMarks":100,"minMarks":50,"grade":"A+"}, {"marksObtained":98,"title":"Open Book Test 1 Gujarati ( 400 )","term":"Open Book Test 1","subjectName":"Gujarati","maxMarks":400,"minMarks":10,"grade":"A+"} ] ]
额外优化(可选)
如果需要同时保留term名称作为表格标题使用,可以调整结果结构为[{ term: "xxx", scores: [...] }, ...],代码修改如下:
const groupedWithTerm = Object.entries(groupedByTermObj).map(([term, scores]) => ({ term, scores }));
内容的提问来源于stack exchange,提问作者Zaid
相关产品推荐
相关产品推荐

