可以用 reduce
方法来构建省市区三级树结构,代码如下:
function buildRegionTree(data) {
const tree = [];
// 省份映射
const provinceMap = new Map();
data.forEach(({ p_id, c_id, a_id }) => {
// 处理省份
if (!provinceMap.has(p_id)) {
provinceMap.set(p_id, {
id: p_id,
children: new Map()
});
}
const province = provinceMap.get(p_id);
// 处理城市
if (!province.children.has(c_id)) {
province.children.set(c_id, {
id: c_id,
children: []
});
}
const city = province.children.get(c_id);
// 处理区县
city.children.push({ id: a_id });
});
// 转换 Map 为数组
provinceMap.forEach((province) => {
const cities = [];
province.children.forEach((city) => {
cities.push({
id: city.id,
children: city.children
});
});
tree.push({
id: province.id,
children: cities
});
});
return tree;
}
const extend_arealimitconfigs = [
{ p_id: 4, c_id: 59, a_id: 579 },
{ p_id: 4, c_id: 58, a_id: 566 },
{ p_id: 4, c_id: 59, a_id: 583 },
{ p_id: 4, c_id: 53, a_id: 524 }
];
console.log(JSON.stringify(buildRegionTree(extend_arealimitconfigs), null, 2));