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

如何在JavaScript/TypeScript中优雅合并带条件的FareZone对象数组

实现方案

可以借助Map做分组聚合、Set做站点去重,逻辑简洁性能优异,完整实现如下:

interface Stop {
  code: string 
}

interface FareZone {
    name: string;
    stops: Stop[];
}

const outbound: FareZone[] = [{name: 'Zone A', stops: [{ code: 'C00'}] }, {name: 'Zone B', stops: [{ code: 'C01'}, { code: 'C02'}] }];
const inbound: FareZone[] = [{name: 'Zone A', stops: [{ code: 'C00'}, { code: 'C04'}] }, {name: 'Zone C', stops: [{ code: 'C08'}] }];

// 核心合并逻辑
const zoneGroup = new Map<string, Set<string>>();
[...outbound, ...inbound].forEach(zone => {
  const stopCodes = zoneGroup.get(zone.name) || new Set();
  zone.stops.forEach(stop => stopCodes.add(stop.code));
  zoneGroup.set(zone.name, stopCodes);
});

const combined: FareZone[] = Array.from(zoneGroup, ([name, codes]) => ({
  name,
  stops: Array.from(codes, code => ({ code }))
}));

逻辑说明

  1. 先将两个待合并数组合并后遍历,用Map以票价区名称为key做分组,value用Set存储站点编码,自动实现重复站点的去重
  2. 最后将Map结构转换回要求的FareZone数组格式即可
  3. 整体时间复杂度为O(n)(n为所有站点总数量),性能远高于多次遍历筛选的实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:57:01