想法是这样的:某一天 从交流群里听见某位小伙伴接到一个需求: 需要用原生实现 旅游选择地址管理 的需求
于是我就突发奇想,打开某8同城,
发现贵站枚举数据是写死的 于是发挥了我cv工程师的魅力,对相关数据 进行 copy
于是打开了我的编辑器,对数据结构进行分析
首先是一个省份城市的枚举
我决定把他作为此次加工枚举数据的顶级
接下来就是一堆各级省份城市下边的主要城市
还有一些直辖市的枚举
于是我使用了最简单的forin遍历对象 对三对枚举数据进行一个加工
const fs = require('fs');
/**
* 统一格式: {
name,
key,
children
}
*/
let addressdata = []; //声明一个空数组
//对省份枚举进行一个遍历,并储存至 空数组里
for (const key in provinceList) {
addressdata.push({
name: key,
key: provinceList[key],
children: [],
});
}
//对直辖市的枚举进行一个遍历,并储存至 addressdata里
for (const key in independentCityList) {
addressdata.unshift({
name: key,
engname: independentCityList[key].split('|')[0],
key: independentCityList[key].split('|')[1],
});
}
//遍历下级市份枚举数据
for (const val in cityList) {
//遍历出 以上父级枚举
addressdata.forEach((item, index) => {
//对父级的name属性与 下级市份枚举数据的key名 做判断
if (item.name === val) {
//对市份枚举数据进行 统一
for (const key in cityList[val]) {
//加入各自对应的children
addressdata[index].children.push({
name: key,
engname: cityList[val][key].split('|')[0],
key: cityList[val][key].split('|')[1],
});
}
}
});
}
fs.writeFileSync('./address.json', JSON.stringify(addressdata));
ok,完美!