扁平数据转树形
借助引用的特性完成关联效果, 最后输出一个数组
不管怎么说 总归比递归的时间复杂度要低吧
有个朋友说, 你在用 map[key] 的时候也相当于一次循环.....
emmmm 没看过源码, 有时间我去看下再更新..
// 将一维的省市区数据转为三维
formatSourceArea = (sourceArea) => {
let mapSouceArea = {};
let finalAreaList = [];
sourceArea.map(area => {
mapSouceArea[area.id] = area;
});
Object.keys(mapSouceArea).map(areaId => {
if (mapSouceArea[areaId].parent_id) {
if (mapSouceArea[mapSouceArea[areaId].parent_id]) {
if (!mapSouceArea[mapSouceArea[areaId].parent_id].children) {
mapSouceArea[mapSouceArea[areaId].parent_id].children = [];
}
mapSouceArea[mapSouceArea[areaId].parent_id].children.push(mapSouceArea[areaId]);
}
} else {
finalAreaList.push(mapSouceArea[areaId]);
}
});
return finalAreaList;
}
// antd 的 tree 组件会返回所有选中的地区的 ID, 所以又写了一个获取选中最高等级的逻辑, 与本文主题无关
analysisMergerArea = (val) => {
let finalAreaList = [];
const { mapSouceArea } = this.state;
val.map(id => {
let match = false
val.map(id2 => {
if (mapSouceArea[id].parent_id && id2 == mapSouceArea[id].parent_id) {
match = true;
}
});
if (!match) {
finalAreaList.push(id);
}
})
this.setState({
selectedAreasId: finalAreaList
})
}