水文:对某8同城的地址枚举数据进行加工

130 阅读1分钟

想法是这样的:某一天 从交流群里听见某位小伙伴接到一个需求: 需要用原生实现 旅游选择地址管理 的需求

于是我就突发奇想,打开某8同城,

image.png

发现贵站枚举数据是写死的 于是发挥了我cv工程师的魅力,对相关数据 进行 copy

于是打开了我的编辑器,对数据结构进行分析

image.png

首先是一个省份城市的枚举

我决定把他作为此次加工枚举数据的顶级

接下来就是一堆各级省份城市下边的主要城市

image.png

还有一些直辖市的枚举

image.png

于是我使用了最简单的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));

image.png

ok,完美!