You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Axios异步函数getProvinces使返回的省市数据按拼音顺序排列

问题原因

Golang的map类型为无序哈希表,遍历过程不会保留初始化阶段的插入顺序,因此后端接口返回的省份列表顺序和initProvinces()中的定义顺序不一致。

解决方案

方案1:后端修改(更推荐,一次修改全端生效)

修改接口返回逻辑,不要直接遍历provinceCities map生成返回值,先预定义按预期顺序排列的省份名称切片,按切片顺序从map中读取数据组装返回结果即可。
示例代码:

// 预定义按拼音顺序排列的省份列表,按业务需要的顺序补全所有省份即可
var provinceOrder = []string{"安徽省", "北京市", "重庆市", "福建省", ...}

func getProvincesHandler() []interface{} {
    var result []interface{}
    // 按预设顺序遍历取数
    for _, provinceName := range provinceOrder {
        cities, ok := provinceCities[provinceName]
        if !ok {
            continue
        }
        result = append(result, map[string]interface{}{
            "province": provinceName,
            "cities": cities,
            "autoPopulate": len(cities) == 1, // 按原有业务逻辑赋值即可
        })
    }
    return result
}

方案2:前端修改getProvinces()函数

如果无法调整后端逻辑,可以在前端拿到返回结果后,按中文拼音首字母排序后再返回。
修改后的代码:

export async function getProvinces() {
  const result = await axios.get(
    `${process.env.NEXT_PUBLIC_API_ENDPOINT}/info/provinces`
  );
  // 按省份名称中文拼音排序
  return result.data.sort((a, b) => a.province.localeCompare(b.province, 'zh-CN'));
}

如果还需要对每个省份下的城市也按拼音排序,可扩展为如下逻辑:

export async function getProvinces() {
  const result = await axios.get(
    `${process.env.NEXT_PUBLIC_API_ENDPOINT}/info/provinces`
  );
  return result.data
    .sort((a, b) => a.province.localeCompare(b.province, 'zh-CN'))
    .map(provinceItem => {
      provinceItem.cities.sort((cityA, cityB) => cityA.localeCompare(cityB, 'zh-CN'))
      return provinceItem
    });
}

内容的提问来源于stack exchange,提问作者user15401250

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:54:06