在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);
代码逻辑说明
- 遍历与聚合:通过
reduce遍历原始数组,用累加器acc存储最终的嵌套结构。 - 省份层级处理:检查当前遍历项的省份是否已存在于累加器中,不存在则创建新的省份对象并加入累加器。
- 城市层级处理:在当前省份的城市列表中查找对应城市,不存在则创建包含城市名和空区域列表的对象,加入省份的城市列表。
- 区域收集:将当前项的区域值添加到对应城市的区域列表中。
这段代码支持扩展场景——如果后续数据包含多个省份、每个省份下多个城市,代码会自动完成分组,无需额外修改。
内容的提问来源于stack exchange,提问作者Er Pankaj Dhumal
相关产品推荐
相关产品推荐

