getProvinces()在func initProvinces()via上使用異步函式時axios.get,provinceCities不會按字母順序檢索,這與它們在 中的順序不同func initProvinces()。
我怎么能改變getProvinces()以provinceCities按字母順序回傳?
使用 Axios 通過 getProvinces() 獲取資料:
export async function getProvinces() {
const result = await axios.get(
`${process.env.NEXT_PUBLIC_API_ENDPOINT}/info/provinces`
);
return result.data;
}
Golang 函式 initProvinces() 與資料:
func initProvinces() {
provinceCities = make(map[string][]string)
//Anhui
provinceCities["安徽省"] = []string{"安慶市", "蚌埠市", "亳州市", "巢湖市", "池州市", "滁州市", "阜陽市", "廣德市", "合肥市", "淮北市", "淮南市", "黃山市", "界首市", "六安市", "馬鞍山市", "明光市", "寧國市", "潛山市", "宿州市", "天長市", "桐城市", "銅陵市", "蕪湖市", "無為市", "宣城市"}
//Beijing
provinceCities["北京市"] = []string{"北京市"}
...
}
省份串列要大得多,我只包括了前兩個。
資料的console.log:
(33) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {province: '黑龍江省', cities: Array(33), autoPopulate: false}
1: {province: '天津市', cities: Array(1), autoPopulate: true}
對比一下,索引0是“黑龍江省”,應該是“安徽省”。
uj5u.com熱心網友回復:
據我所知,您可以通過以下幾種方式對資料進行排序:
- 回傳已經從 API 排序的資料
- 收到后在您的 UI 代碼中對其進行本地排序
我不熟悉 GoLang 來談論 API 端的排序(盡管我認為排序仍然是一個微不足道的呼叫),但這里有一個在應用程式端使用 javascript 對回應資料進行排序的示例。
使用自定義比較器來比較province屬性String.prototype.localeCompare。請注意,您可能還需要指定locales和options引數來自定義行為以適合您使用的語言。
const compareByProvince = (a, b) => a.province.localeCompare(b.province);
export async function getProvinces() {
const result = await axios.get(
`${process.env.NEXT_PUBLIC_API_ENDPOINT}/info/provinces`
);
return result.data.sort(compareByProvince);
}
- Array.prototype.sort
- 排序非 ASCII 字符
- String.prototype.localeCompare
uj5u.com熱心網友回復:
前端解決方案:
在將資料分配給要傳遞到provinces.jsx檔案的道具時,我們已經使用.map()將相關資訊獲取到組件的回傳中。
因此.sort(),我習慣于在映射之前對資訊進行排序。映射它然后對其進行排序時它不起作用。
最后一行代碼如下所示:
const PROVINCE_OPTIONS = provinces.sort((x,y)=>x.province.localeCompare(y.province, 'zh-CN')).map((item) => item.province)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/337606.html
上一篇:根據嵌套值之一對地圖進行排序
