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

数组对比并向指定索引位置推送数据的技术需求

实现方案:数组对比并匹配推送床位数据

看起来你需要实现的是基于床位标识(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' }
];

接下来给出具体实现思路和代码:

核心思路

  1. 构建快速查找映射表:将arr2中的数据以room_no-bed_no为唯一键存入Map,这样后续匹配时可以做到O(1)时间复杂度,避免嵌套循环的低效问题。
  2. 遍历匹配合并:遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:42