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] || [] // 无匹配时返回空数组 }));
常见错误排查点
- 检查两个数组中匹配字段的拼写和大小写是否完全一致(比如
roomcodevsroomCode); - 确认
room_availability中确实存在与rooms匹配的roomcode记录; - 不要直接修改原
rooms数组时遗漏赋值,建议返回新对象避免副作用。
内容的提问来源于stack exchange,提问作者Bunsen Honeydew
相关产品推荐
相关产品推荐

