//省市数据格式化
element 级联选择器 树形结构
/**
* @param {Object} addressMap 数据源
* @param {String} idKey 数据id
* @param {String} pIdKey 父节点id
* @param {String} childrenKey 树形节点名称
*/
formatAddress(addressMap = {}, idKey = 'id', pIdKey = 'pId', childrenKey = 'children') { let map = {}; //存省市code值及序号 let data = []; //对象数组 let dataset = []; //格式化后的省市数据 //map数据转对象数组 for (let i in addressMap) { let obj = {}; obj[i] = addressMap[i]; obj['label'] = addressMap[i]; obj['value'] = i; //根据数据源(例:湖北省17 武汉市1701,父id则为17),构造id和父id if (i.length !== 2) { obj[pIdKey] = i.slice(0, 2); } obj[idKey] = i; data.push(obj); } //存值 key值: 省市key值(如'01'),value值:对象数组的序号index(从0开始),便于取值 data.forEach((item, index) => { map[item[idKey]] = index; console.log(map); }); for (let k = 0; k < data.length; k++) { let node = data[k]; //当前对象 let pIdValue = node[pIdKey]; //从当前对象获取pId对应的值 let mapIndex = map[pIdValue]; //需要放入children的序号 //判断是否存在pId if (pIdValue !== '-1' && pIdValue !== '' && data[mapIndex]) { //判断是否存在children,找到其pId对应的位置并将值放入其中 if (!data[mapIndex][childrenKey]) { data[mapIndex][childrenKey] = []; data[mapIndex][childrenKey].push(node); } else { data[mapIndex][childrenKey].push(node); } } else { dataset.push(node); } } return dataset; }
数据源(addressMap)举例:
{ "10":"江苏省", "11":"浙江省", "12":"安徽省", "13":"福建省", "14":"江西省", "15":"山东省", "16":"河南省", "17":"湖北省", "18":"湖南省", "19":"广东省", "20":"广西壮族自治区", "21":"海南省", "22":"重庆市", "23":"四川省", "24":"贵州省", "25":"云南省", "26":"西藏自治区", "27":"陕西省", "28":"甘肃省", "29":"青海省", "30":"宁夏回族自治区", "31":"新疆维吾尔自治区", "2201":"万州区", "2202":"涪陵区", "2203":"渝中区", "2204":"大渡口区", "2205":"江北区", "2206":"沙坪坝区", "2207":"九龙坡区", "2208":"南岸区", "2209":"北碚区", "2210":"綦江区", "2211":"大足区", "2212":"渝北区", "2213":"巴南区", "2214":"黔江区", "2215":"长寿区", "2216":"江津区", "2217":"合川区", "2218":"永川区", "2219":"南川区", "2220":"璧山区", "2221":"铜梁区", "2222":"潼南区", "2223":"荣昌区", "2902":"海东市", "09012":"延边市", "09011":"通榆县", "09010":"抚松县", "09009":"敦化市", "09008":"通化市", "09007":"长春市", "09006":"吉林市", "09005":"四平市", "09004":"辽源市", "09003":"白山市", "09002":"松原市", "09001":"白城市", "0909":"宝山区", "0907":"杨浦区", "0908":"闵行区", "0905":"普陀区", "0906":"虹口区", "0903":"长宁区", "0904":"静安区", "0901":"黄浦区", "0902":"徐汇区", "0914":"青浦区", "0915":"奉贤区", "0912":"金山区", "0913":"松江区", "0910":"嘉定区", "0911":"浦东新区", "01":"北京市", "02":"天津市", "03":"河北省", "04":"山西省", "05":"内蒙古自治区", "06":"辽宁省", "07":"吉林省", "08":"黑龙江省", "09":"上海市", "03021":"景县", "03022":"魏县", "03020":"任丘市",
"0204":"南开区", "0205":"河北区", "0202":"河东区", "0203":"河西区", "0201":"和平区", "0208":"西青区", "0209":"津南区", "0206":"红桥区", "0207":"东丽区", "0215":"静海区", "0216":"蓟州区", "0213":"滨海新区", "0214":"宁河区", "0211":"武清区", "0212":"宝坻区", "0210":"北辰区", "03018":"怀来县", "03019":"平泉县", "03014":"定州市", "03015":"迁安市", "03016":"宁晋县", "03017":"涿州市", "0105":"丰台区", "03010":"石家庄市", "0106":"石景山区", "0103":"西城区", "03012":"衡水市", "0104":"朝阳区", "03013":"辛集市", "0101":"海淀区", "0102":"东城区", "0109":"通州区", "0107":"门头沟区", "0108":"房山区", "03007":"承德市", "03008":"秦皇岛市", "03009":"邢台市", "03003":"廊坊市", "03004":"沧州市", "03005":"保定市", "03006":"邯郸市", "0116":"延庆区", "0114":"平谷区", "03001":"唐山市", "0115":"密云区", "03002":"张家口市", "0112":"大兴区", "0113":"怀柔区", "0110":"顺义区", "0111":"昌平区" }