You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套数组中提取按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:42:33