如何通过映射对象列表与数组创建新的对象数组?
匹配ID生成新对象数组解决方案
你可以基于Object.entries(obj)的思路继续完成,核心是遍历出勤记录的同时,在学生数组里找到对应ID的对象,再提取需要的属性组合成新对象。
完整实现代码
const arrOfObj = [{ id: "id1", name: "A1", rollno: "1"}, {id: "id2", name: "A2", rollno: "2"}, { id: "id3", name: "A3", rollno: "3"}]; const obj = {"id1": "absent", "id2": "present"}; const newArrOfObj = Object.entries(obj).map(([id, attendance]) => { // 根据ID在学生数组中找到匹配的对象 const student = arrOfObj.find(item => item.id === id); // 组合成需要的新对象 return { id: student.id, name: student.name, attendance: attendance }; }); console.log(newArrOfObj);
代码逻辑解释
Object.entries(obj):把出勤对象obj转换成键值对数组[["id1", "absent"], ["id2", "present"]],方便遍历每个出勤记录。map遍历:对每个键值对用解构语法([id, attendance])直接取出ID和出勤状态。find匹配学生:在arrOfObj中根据ID找到对应的学生对象。- 生成新对象:只保留需要的
id、name和attendance属性,组合成目标结构。
健壮性优化(可选)
如果担心obj中存在arrOfObj里没有的ID,可以加个判断避免报错,同时过滤掉无效记录:
const newArrOfObj = Object.entries(obj) .map(([id, attendance]) => { const student = arrOfObj.find(item => item.id === id); // 仅当找到匹配学生时才返回新对象 return student ? { id: student.id, name: student.name, attendance } : null; }) // 过滤掉null值 .filter(item => item !== null);
内容的提问来源于stack exchange,提问作者learner_2010
相关产品推荐
相关产品推荐

