如何映射关联两个对象数组,生成指定结构的新对象数组?
问题分析与解决方法
错误原因
- 遍历方向错误:你循环的是
students数组,每个学生只会生成一个对象,但需求是每个data条目对应一个独立的学生对象,最终结果长度要和data一致(3条)。 - 误用
map方法:map会返回和原数组长度相同的新数组,导致每个学生的item变成了包含匹配项和undefined的数组,而非单个对象。 - 属性名拼写错误:原数据里是
studentID(大写ID),你写成了studentId(小写Id),导致匹配逻辑根本不生效。
正确实现方法
先把students转成Map,用学生ID作为键,这样能快速查找对应学生信息,再遍历data数组生成目标结构:
// 构建学生信息Map,方便快速查找 const studentMap = new Map(students.map(s => [s.student_id, s])); // 遍历data生成结果数组 const result = data.map(item => { const targetStudentId = item.entity.studentID[0]; const student = studentMap.get(targetStudentId); return { ...student, item: { id: item.id, status: item.status } }; }); console.log(result);
替代方案(小数据量适用)
如果数据量不大,也可以用find方法直接查找学生,不用Map:
const result = data.map(item => { const student = students.find(s => s.student_id === item.entity.studentID[0]); return { ...student, item: { id: item.id, status: item.status } }; });
内容的提问来源于stack exchange,提问作者Matt_crud
相关产品推荐
相关产品推荐

