如何从嵌套数组中提取按studentId分组的唯一classNo集合
从嵌套数组对象中提取按studentId分组的唯一classNo集合
原始数组
const arr = [ { "studentId": 70, "data": [ { "studentId": 70, "teacher": "Syam", "classNo": 100, }, { "studentId": 70, "teacher": "Mathew", "classNo": 101, }, ] }, { "studentId": 69, "data": [ { "studentId": 69, "teacher": "Sam", "classNo": 102, }, { "studentId": 69, "teacher": "Chris", "classNo": 101, }, ] } ]
期望结果
[ {studentId: 70, classNo: [100, 101]}, {studentId: 69, classNo: [102, 101]} ]
问题分析
你之前尝试的代码逻辑错误:外层map遍历学生对象时,内层map提取的是studentId,再通过filter去重得到的是学生ID数组,完全没有处理classNo字段,因此无法得到预期结果。
解决方案
方法1:利用Set快速去重(推荐)
Set会自动过滤重复值,配合扩展运算符...可以快速将其转为数组:
const result = arr.map(item => { const uniqueClassNos = [...new Set(item.data.map(d => d.classNo))]; return { studentId: item.studentId, classNo: uniqueClassNos }; });
方法2:手动遍历去重(兼容旧环境)
如果运行环境不支持Set,可以用indexOf手动过滤重复值:
const result = arr.map(item => { const classNos = item.data.map(d => d.classNo); const uniqueClassNos = classNos.filter((num, idx) => classNos.indexOf(num) === idx); return { studentId: item.studentId, classNo: uniqueClassNos }; });
内容的提问来源于stack exchange,提问作者Lineesh Mb
相关产品推荐
相关产品推荐

