項目中一次排序規則的改動,注意到js中map的遍歷的順序


背景:項目需要對前端頁面上某個插件的下拉選擇項進行排序,需要按照配置的順序顯示。

首先調查后台,發現sql語句中已經添加order by。之后發現查詢結果遍歷后封裝進HashMap,這里改為LinkHashMap。再之后向前端返回json數據,使用的是net.sf.json.JSONObject,該方法對map進行序列化時是無序的,改用Gson進行序列化。

數據傳到前端,使用Chrome的debug發現右側Watch中json數據是按照map中key值的字母順序進行排列的,這時候有點犯難,難道需要修改數據格式為數組或者從后端再傳送順序過來嗎?因為使用該插件的地方很多而且不容易修改,所以開始從后端多傳遞一個數據存儲數據順序。修改完成之后,進行測試,比較順利,然后又發現,有一個沒有按照新傳遞的順序進行處理的地方也可以正常排序了。仔細進行調查之后,發現下面情況:

js中map遍歷的順序是按照插入的順序來執行的。如果map的來源是字符串轉換的,那么就會按照字符串中key值的順序進行遍歷。千萬不要被debug中顯示的順序誤導,這里應該是為了方便查看對key進行了字母順序排序。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM