如何关联两个JSON数组数据:根据教师_id返回对应课程信息
关联教师与课程数据,返回教师详情及对应课程
我有两个JSON数据模块,分别存储课程(Courses)和教师(instructor)信息,二者通过_id字段关联。需求是:返回教师详情时,同时附带该教师的所有课程信息。
示例数据
教师数据(instructor.js)
let instructorData = [ { _id: 1, name: "superman", courses: [1,3], },{ _id: 2, name: "batman", courses: [2], } ]; module.exports = { instructorData: instructorData, };
课程数据(courses.js)
let coursesData = [ { _id: 1, name: "DC", instructor: { _id:1 }, },{ _id: 2, name: "Marvel", instructor: { _id:2 }, },{ _id: 3, name: "DC vs Marvel", instructor: { _id:1 }, }, ]; module.exports = { coursesData: coursesData, };
问题
以_id为1的教师为例,该教师拥有2门课程,如何遍历获取这些课程并返回如下格式的结果?
{ name: "superman", courses: [{name: "DC"},{name: "DC vs Marvel"}] }
解决方案
可以通过JavaScript的数组方法快速实现数据关联和格式转换:
- 先导入两个数据模块:
const { instructorData } = require('./instructor.js'); const { coursesData } = require('./courses.js');
- 编写处理函数:
function getInstructorWithCourses(instructorId) { // 定位目标教师 const targetInstructor = instructorData.find(inst => inst._id === instructorId); if (!targetInstructor) return null; // 筛选并格式化该教师的课程 const formattedCourses = coursesData .filter(course => course.instructor._id === instructorId) .map(course => ({ name: course.name })); // 返回指定结构的结果 return { name: targetInstructor.name, courses: formattedCourses }; } // 测试获取_id为1的教师数据 console.log(getInstructorWithCourses(1));
逻辑说明
- 使用
find方法从教师数组中匹配目标ID的教师对象; - 用
filter筛选出课程数组中归属该教师的所有课程,再通过map将课程数据转换为仅包含name字段的对象; - 最后将教师名称和处理后的课程数组组合成需求格式返回。
执行上述代码后,就能得到期望的结果。
内容的提问来源于stack exchange,提问作者Manas S. Roy
相关产品推荐
相关产品推荐

