数组对比并向指定索引位置推送数据的技术需求
实现方案:数组对比并匹配推送床位数据
看起来你需要实现的是基于床位标识(room_no + bed_no)将arr2中的床位状态、患者信息匹配合并到arr1对应项的功能。首先我先修正你提供的arr2中的语法错误(原数据存在括号不闭合、字段缺失的问题),假设补全后的arr2如下:
const arr2 = [ { patient_details:[{name:'patient1',age:22}], patient_room_details:[{room_no:1,bed_no:'1A'}], status:'occupied' }, { patient_room_details:[{room_no:1,bed_no:'1B'}], status:'available' }, { patient_details:[{name:'patient2',age:32}], patient_room_details:[{room_no:2,bed_no:'2A'}], status:'occupied' } ];
接下来给出具体实现思路和代码:
核心思路
- 构建快速查找映射表:将
arr2中的数据以room_no-bed_no为唯一键存入Map,这样后续匹配时可以做到O(1)时间复杂度,避免嵌套循环的低效问题。 - 遍历匹配合并:遍历
arr1的每一个床位项,通过唯一键查找映射表中的对应数据,将状态、患者信息合并到当前项中;若未找到匹配数据,设置默认状态(比如available)。
完整代码示例
// 原始arr1数据 const arr1 = [ {room_no:1,bed_no:'1A'}, {room_no:1,bed_no:'1B'}, {room_no:2,bed_no:'2A'}, {room_no:3,bed_no:'3A'}, {room_no:3,bed_no:'3B'}, {room_no:4,bed_no:'4A'} ]; // 修正补全后的arr2数据 const arr2 = [ { patient_details:[{name:'patient1',age:22}], patient_room_details:[{room_no:1,bed_no:'1A'}], status:'occupied' }, { patient_room_details:[{room_no:1,bed_no:'1B'}], status:'available' }, { patient_details:[{name:'patient2',age:32}], patient_room_details:[{room_no:2,bed_no:'2A'}], status:'occupied' } ]; // 步骤1:构建床位映射表 const bedInfoMap = new Map(); arr2.forEach(item => { // 假设每个arr2项对应单个床位,取patient_room_details的第一个元素 const { room_no, bed_no } = item.patient_room_details[0]; const uniqueKey = `${room_no}-${bed_no}`; bedInfoMap.set(uniqueKey, item); }); // 步骤2:遍历arr1匹配合并数据 const mergedArr = arr1.map(bedItem => { const uniqueKey = `${bedItem.room_no}-${bedItem.bed_no}`; const matchedBedInfo = bedInfoMap.get(uniqueKey); if (matchedBedInfo) { // 合并原始床位信息与匹配到的状态、患者数据 return { ...bedItem, patient_details: matchedBedInfo.patient_details || null, status: matchedBedInfo.status }; } // 未匹配到的床位,设置默认状态为available,患者信息为空 return { ...bedItem, patient_details: null, status: 'available' }; }); // 输出结果 console.log(mergedArr);
边界情况考虑
- 如果
arr2中存在一个项对应多个床位(即patient_room_details包含多个元素),可以修改映射表的构建逻辑,遍历patient_room_details的每一个元素存入Map。 - 如果需要严格校验匹配逻辑,可以添加对
room_no、bed_no字段存在性的判断,避免因数据缺失导致的错误。 - 若需要区分“未在arr2中出现”和“明确标记为available”的情况,可以将默认状态设为
undefined或者自定义标识。
内容的提问来源于stack exchange,提问作者Shaik Nizamuddin
相关产品推荐
相关产品推荐

