请求实现基于SubjectID与Month的数组对象转换需求
按科目分组生成年度成绩数组
需求说明
将给定的月度成绩数据,按科目(SubjectID/TitleName)分组,为每个科目生成长度为12的数组(对应1-12月),把对应月份的Average值填入数组对应索引位置(注意:月份是1起始,数组索引是0起始,需做减1转换),其余位置填充0。
原始输入数据
[ { "Month": 2, "SubjectID": 25, "TitleName": "TEST32", "Average": 85 }, { "Month": 4, "SubjectID": 1, "TitleName": "TEST", "Average": 63 }, { "Month": 4, "SubjectID": 25, "TitleName": "TEST32", "Average": 88 } ]
实现代码(JavaScript)
// 原始数据 const rawData = [ { Month: 2, SubjectID: 25, TitleName: "TEST32", Average: 85 }, { Month: 4, SubjectID: 1, TitleName: "TEST", Average: 63 }, { Month: 4, SubjectID: 25, TitleName: "TEST32", Average: 88 } ]; // 按科目分组并生成年度数组 const result = Object.values(rawData.reduce((grouped, item) => { // 首次遇到该科目时,初始化包含12个0的数组 if (!grouped[item.TitleName]) { grouped[item.TitleName] = { name: item.TitleName, data: new Array(12).fill(0) }; } // 将成绩填入对应月份的索引位置 grouped[item.TitleName].data[item.Month - 1] = item.Average; return grouped; }, {})); console.log(result);
输出结果
[ { name: 'TEST32', data: [0, 85, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0] }, { name: 'TEST', data: [0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0] } ]
内容的提问来源于stack exchange,提问作者Strywyr
相关产品推荐
相关产品推荐

