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

如何用JavaScript基于三个对象数组生成目标新对象?

JavaScript对象数组合并方案

现有三个对象数组COURSES、ADMISSION_DETAILS、ATTENDANCE,需要合并生成指定结构的新对象数组,以下是实现方案:

原数据

const COURSES=[
    {
        PROGRAM: "BTech",
        COURSE: 'PHYSICS',
        FEE:200
    },
    {
        PROGRAM: "BTech",
        COURSE: 'CHEMISTRY',
        FEE:200
    },
    {
        PROGRAM: "BTech",
        COURSE: 'BIOLOGY',
        FEE:200
    }
]

const ADMISSION_DETAILS=[
    {
     NAME:'AJU', REGISTER_NUMBER:'JAJEGJAFD512315',
     EMAIL:'xxxxxasdf@gmail.com',
     PHONE:'974654645454'
    }
]

const ATTENDANCE = [
    {
        NAME: 'AJU',
        REGISTER_NUMBER: 'JAJEGJAFD512315',
        ATTENDANCE:{
            PHYSICS:75,
            CHEMISTRY:86,
            BIOLOGY:40
        }
    }
]

期望输出

const desired_output=[
    {
        NAME:'AJU',
        REGISTER_NUMBER:'JAJEGJAFD512315',
        EMAIL:'xxxxxasdf@gmail.com',
        PHONE:'974654645454',
        PROGRAM: "BTech",
        COURSE:"PHYSICS",
        ATTENDANCE:75,
        FEE:200,
    },
    {
        NAME:'AJU',
        REGISTER_NUMBER:'JAJEGJAFD512315',
        EMAIL:'xxxxxasdf@gmail.com',
        PHONE:'974654645454',
        PROGRAM: "BTech",
        COURSE:"CHEMISTRY",
        ATTENDANCE:86,
        FEE:200
    },
     {
        NAME:'AJU',
        REGISTER_NUMBER:'JAJEGJAFD512315',
        EMAIL:'xxxxxasdf@gmail.com',
        PHONE:'974654645454',
        PROGRAM: "BTech",
        COURSE:"BIOLOGY",
        ATTENDANCE:40,
        FEE:200
    }
]

实现代码

// 构建出勤数据映射,通过学号快速查找对应课程出勤
const attendanceMap = new Map();
ATTENDANCE.forEach(item => {
  attendanceMap.set(item.REGISTER_NUMBER, item.ATTENDANCE);
});

// 合并生成目标数组
const desired_output = ADMISSION_DETAILS.flatMap(student => {
  const studentAttendance = attendanceMap.get(student.REGISTER_NUMBER) || {};
  return COURSES.map(course => ({
    // 展开学生基础信息
    ...student,
    // 添加课程相关字段
    PROGRAM: course.PROGRAM,
    COURSE: course.COURSE,
    FEE: course.FEE,
    // 匹配对应课程的出勤数据,无数据时默认0
    ATTENDANCE: studentAttendance[course.COURSE] || 0
  }));
});

console.log(desired_output);

思路说明

  1. 构建出勤映射:将ATTENDANCE数组转换为以REGISTER_NUMBER为键的Map,避免每次查找出勤数据时遍历数组,提升效率。
  2. 生成多课程记录:使用flatMap遍历每个学生,对每门课程生成一条包含学生信息、课程信息和对应出勤数据的记录,flatMap自动将嵌套数组展平为一维数组。
  3. 容错处理:当某门课程没有对应出勤数据时,默认设置为0,可根据实际需求调整默认值。

内容的提问来源于stack exchange,提问作者amal m reji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:05:17