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

在JavaScript中将扁平化数组转换为多级嵌套JSON对象数组

将扁平化数组转换为多级嵌套结构

你可以使用Array.reduce()方法高效完成这个转换,下面是直接可用的代码:

// 原始扁平化数组
const flatData = [
  { "province": "Aceh", "city": "Banda Aceh", "district": "Meuraksa" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Jaya Baru" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Banda Raya" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Baiturrahman" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Lueng Bata" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Kuta Alam" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Kuta Raja" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Syiah Kuala" },
  { "province": "Aceh", "city": "Banda Aceh", "district": "Ulee Kareng" }
];

// 转换为嵌套结构
const nestedData = flatData.reduce((acc, item) => {
  // 查找或创建省份条目
  let provinceItem = acc.find(p => p.province === item.province);
  if (!provinceItem) {
    provinceItem = { province: item.province, city: [] };
    acc.push(provinceItem);
  }

  // 查找或创建城市条目
  let cityItem = provinceItem.city.find(c => c.cityname === item.city);
  if (!cityItem) {
    cityItem = { cityname: item.city, districts: [] };
    provinceItem.city.push(cityItem);
  }

  // 添加区域到对应城市的列表
  cityItem.districts.push(item.district);
  return acc;
}, []);

console.log(nestedData);

代码逻辑说明

  1. 遍历与聚合:通过reduce遍历原始数组,用累加器acc存储最终的嵌套结构。
  2. 省份层级处理:检查当前遍历项的省份是否已存在于累加器中,不存在则创建新的省份对象并加入累加器。
  3. 城市层级处理:在当前省份的城市列表中查找对应城市,不存在则创建包含城市名和空区域列表的对象,加入省份的城市列表。
  4. 区域收集:将当前项的区域值添加到对应城市的区域列表中。

这段代码支持扩展场景——如果后续数据包含多个省份、每个省份下多个城市,代码会自动完成分组,无需额外修改。

内容的提问来源于stack exchange,提问作者Er Pankaj Dhumal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:23