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

Node.js API开发:按roomcode合并rooms与room_availability数组

解决Room数组与可用性数据合并问题

问题分析

你需要将room_availability中与rooms的roomcode匹配的数据,添加到对应房间的dates字段中,当前dates为空通常是因为匹配逻辑出错(比如字段名大小写不一致、过滤条件错误)。

修正后的实现代码

先给出基础版本(适合数据量不大的场景):

// 示例输入数据(替换为你的实际数据)
const rooms = [
  { roomcode: 'ROOM1', name: '标准间', price: 200 },
  { roomcode: 'ROOM2', name: '豪华间', price: 350 }
];

const room_availability = [
  { roomcode: 'ROOM1', date: '2024-05-01', available: true },
  { roomcode: 'ROOM1', date: '2024-05-02', available: false },
  { roomcode: 'ROOM2', date: '2024-05-01', available: true }
];

// 合并逻辑
const mergedRooms = rooms.map(room => {
  // 筛选当前房间对应的所有可用性记录
  const matchingDates = room_availability.filter(availability => 
    availability.roomcode === room.roomcode
  );
  // 返回包含dates字段的新房间对象
  return { ...room, dates: matchingDates };
});

console.log(mergedRooms);

性能优化版本(适合大数据量)

如果room_availability数据量很大,用filter循环多次会影响性能,可以先将其转为以roomcode为键的对象,再快速匹配:

// 将可用性数据转为键值对映射
const availabilityMap = room_availability.reduce((acc, item) => {
  acc[item.roomcode] = acc[item.roomcode] || [];
  acc[item.roomcode].push(item);
  return acc;
}, {});

// 快速合并数据
const mergedRooms = rooms.map(room => ({
  ...room,
  dates: availabilityMap[room.roomcode] || [] // 无匹配时返回空数组
}));

常见错误排查点

  • 检查两个数组中匹配字段的拼写和大小写是否完全一致(比如roomcode vs roomCode);
  • 确认room_availability中确实存在与rooms匹配的roomcode记录;
  • 不要直接修改原rooms数组时遗漏赋值,建议返回新对象避免副作用。

内容的提问来源于stack exchange,提问作者Bunsen Honeydew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:01