«

对服务器返回的城市数据进行处理

时间:2023-8-25 23:36     作者:小锐     分类: React


1.服务器返回的数据如下所示:

0: {id: '1', city_name: '上海', city_pre: 'S', city_pinyin: 'Shanghai', city_short: 'sh', …}
1: {id: '2', city_name: '北京', city_pre: 'B', city_pinyin: 'Beijing', city_short: 'bj', …}
2: {id: '3', city_name: '深圳', city_pre: 'S', city_pinyin: 'Shenzhen', city_short: 'sz', …}
3: {id: '4', city_name: '重庆', city_pre: 'C', city_pinyin: 'Chongqing', city_short: 'cq', …}


2.要将数据转换成A:['安庆', '安阳', '鞍山', '阿克苏'],B:['北京', '保定', '滨州', '包头']


  let [citylink, setCitylink] = useState([])//城市列表

useEffect(() => {
    $_citys().then(res => {  //发送请求获取城市数据

      setCitylink(res.data)
      let data = res.data;

      let arr = []
      arr = data.map(v => v.city_pre.toUpperCase())   //对数组的首写字母进行大写转换
      arr = [...new Set(arr)]  // 将字母进行去重
      arr.sort()  //将数组排序

      let abc = []
      for (let obj of arr) {  //将手写大字母变为abc数组里面对象的键名,键值为[]
        abc[obj] = []     //在这里装换成  abc = [A:[],B:[],C:[],D:[]]的格式
      }

      data.forEach((v, i) => {
        let a = v.city_pre.toUpperCase()
        abc[a].push(v.city_name)   //a是和原有的数组中的对象的键名做对比,相同的就把v.city_name  push进当前的键名数组中
      })

      setCitylink(abc)  //最后将城市数组包对象的形式赋给响应式数据中

    })
    console.log(citylink);

  }, [])

标签: map new Set forEach