城市列表(二)02-城市列表数据重构——sort()-数组排序 & substr(0, 1)-字符串截取 & push()-数组追加

城市列表(二)02-城市列表数据重构——sort()-数组排序 & substr(0, 1)-字符串截取 & push()-数组追加

  • 分析数据结构
// 已有数据结构
[{label:'北京',value:'',pinyin:'beijing',short:'bj'}]
// 所需数据
[{label:'北京',value:'AREA|88cff55c-aaa4-e2e0'}]
// 设计数据->添加分组标题
var cityobj = {
  'a':[{label:'安庆',value:'AREA|88cff55c-aaa4-e2e0'},.....],
  'b':[{label:'北京',value:'AREA|88cff55c-aaa4-e2e0'},{label:'宝鸡',value:'AREA|88cff55c-aaa4-e2e0'},...],
  'c':[{label:'长沙',value:'AREA|88cff55c-aaa4-e2e0'},....]
}
// 考虑按照a->b->c排序 所以需要通过数组控制
var indexs = ['a','b','c',......]
// 结论: 通过数组的索引找a->通过a找对象中的城市数组
  • 数据格式处理
function formatCityData(data) {
  // data->原始数据数组
  let citylist = {}
  let cityIndex = []
  data.map(item => {
    // item->{label:'北京',value:'',pinyin:'beijing',short:'bj'}
    const first = item.short.substr(0, 1) // first->'a' 'b' ...
    // citylist[first] = [item]
    if (first in citylist) {
      // 判断对象中是否存在属性
      citylist[first].push(item)
    } else {
      citylist[first] = [item]
    }
    // 已有: citylist -> {a:[],b:[],c:[].....}
    //需要的 ['a','b','c',......]
    // 取出citylist所有的key->保存在数组中->sort()

    cityIndex = Object.keys(citylist).sort()
  })
  return {
    cityIndex,
    citylist
  }
}

现用处理代码

translateDataFormat = (data) => {
    // 把原始的城市列表数据转化为对象格式
    /*
      {
        a: [{}, {}, {}],
        b: [{}, {}, {}],
        c: [{}, {}, {}]
        ......
      }
    */
    let objCityList = {}
    let indexList = []

    // 实现城市列表数据分组:根据城市的首字母进行划分
    data.forEach(item => {
      // 获取城市的首字母
      // substr() 的参数指定的是子串的开始位置和长度
      let firstLetter = item.short.substr(0, 1)
      if (objCityList[firstLetter]) {
        // objCityList对象中包含该字符
        objCityList[firstLetter].push({
          label: item.label,
          value: item.value,
          short: item.short
        })
      } else {
        // objCityList对象中不包含该字符
        objCityList[firstLetter] = [{
          label: item.label,
          value: item.value,
          short: item.short
        }]
        // 如果列表中不包含该首字母就添加到对应索引
        indexList.push(firstLetter)
      }
    })
    
    // 对数组中的首字母进行排序  a——>z;1——>100;数字优先
    indexList.sort()

    return {
      objCityList,
      indexList
    }
  }

城市首字母排序效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值