React中使用reduce转换学生历史数据结构的问题求助
解决React中用reduce转换studentHistory为指定bodyRows结构的问题
你的错误代码核心问题是JavaScript对象中重复的键会被最后一次赋值覆盖,所以每个map循环只生成了包含最后一个row的对象,完全无法得到目标结构。
以下是两种符合需求的reduce实现方案,根据你的studentHistory实际结构选择:
方案1:studentHistory是单组学生数组(所有学生属于同一批次)
如果studentHistory是单个学生对象数组(每个元素是单个学生),需要将同一字段的所有学生值汇总到一个row中:
// 定义字段映射:显示标题 -> 学生对象中的属性名 const fieldMap = { "Name": "studentName", "Student ID": "studentId", "Studkey": "studentHistoryId" }; const bodyRows = Object.entries(fieldMap).reduce((acc, [label, propName]) => { // 构建当前字段的row:先标题,再所有学生的对应属性值 const rowCells = [ { cell: label }, ...studentHistory.map(student => ({ cell: student[propName] })) ]; acc.push({ row: rowCells }); return acc; }, []);
方案2:studentHistory是多组学生数组(学生按批次分组)
如果studentHistory是分组后的数组(每个元素是一批学生的数组),需要为每批学生生成一组Name/Student ID/Studkey的row,和你给出的目标结构完全匹配:
const bodyRows = studentHistory.reduce((acc, studentGroup) => { // 为当前批次添加Name行 acc.push({ row: [ { cell: "Name" }, ...studentGroup.map(student => ({ cell: student.studentName })) ] }); // 添加Student ID行 acc.push({ row: [ { cell: "Student ID" }, ...studentGroup.map(student => ({ cell: student.studentId })) ] }); // 添加Studkey行 acc.push({ row: [ { cell: "Studkey" }, ...studentGroup.map(student => ({ cell: student.studentHistoryId })) ] }); return acc; }, []);
内容的提问来源于stack exchange,提问作者RyRyWilli
相关产品推荐
相关产品推荐

