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

如何使用JavaScript将混合主、子地点的对象数组归约为合并后的新对象数组?

实现主地点与子区域合并的技术方案

先明确下需求:我们有一个混合了主地点和对应子区域的数组,需要把每个子区域匹配到对应的主地点中,给主地点新增sub_area字段来关联对应的子地点。

原始输入(未格式化数组)

[
  { "name": "main_place1", "address": "place_address1" },
  { "name": "main_place2", "address": "place_address2" },
  { "name":"sub_main_place1", "address":"sub_main_place_address1" },
  { "name":"sub_main_place2", "address":"sub_main_place_address2" }
]

期望输出(格式化后数组)

[
  { "name": "main_place1", "address": "place_address1", "sub_area": "sub_main_place1" },
  { "name": "main_place2", "address": "place_address2", "sub_area": "sub_main_place2" }
]

技术实现方案(以JavaScript为例)

这里的核心逻辑是匹配主地点和子地点的命名关联(子地点名称是sub_+主地点名称),我们可以按以下步骤实现:

  1. 先把原始数组拆分成主地点集合和子地点集合
  2. 遍历主地点集合,根据名称匹配对应的子地点
  3. 给主地点添加sub_area字段,关联匹配到的子地点名称

具体代码如下:

const unformattedPlaces = [
  { "name": "main_place1", "address": "place_address1" },
  { "name": "main_place2", "address": "place_address2" },
  { "name":"sub_main_place1", "address":"sub_main_place_address1" },
  { "name":"sub_main_place2", "address":"sub_main_place_address2" }
];

// 拆分主地点和子地点
const mainPlaces = unformattedPlaces.filter(place => place.name.startsWith('main_'));
const subPlaces = unformattedPlaces.filter(place => place.name.startsWith('sub_'));

// 创建子地点的映射表,方便快速查找(键:去掉sub_后的名称,值:子地点名称)
const subPlaceMap = subPlaces.reduce((map, subPlace) => {
  const mainName = subPlace.name.replace('sub_', '');
  map[mainName] = subPlace.name;
  return map;
}, {});

// 合并主地点和子区域
const formattedPlaces = mainPlaces.map(mainPlace => ({
  ...mainPlace,
  sub_area: subPlaceMap[mainPlace.name] || null // 处理没有对应子地点的情况
}));

console.log(formattedPlaces);

代码逻辑解释

  • 用filter方法拆分主/子地点:通过名称前缀main_和sub_区分两类地点
  • 用reduce创建子地点映射表:把每个子地点的名称去掉sub_后作为键,这样可以快速通过主地点名称找到对应的子地点,提升匹配效率
  • 用map遍历主地点,解构原有属性并新增sub_area字段,从映射表中取出对应的子地点名称,同时做了空值兜底(避免没有匹配到子地点时出现undefined)

如果你的主/子地点命名规则不同,只需要修改replace或者匹配逻辑即可快速适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:07:39