文章目錄
- 1.前言
- 2. 為什么會這樣?
- 3.如何解決?
1.前言
作者作為新人入職的第一天,mentor給了一個維護公司運營平臺的小需求,具體需求是根據運營平臺的某個管理模塊所展示記錄的某些字段對展示記錄做排序。
第一步: mybatis plus組裝排序查詢sql,得到排序后的展示記錄
第二步: 使用LinkedHashMap根據插入順序排序,裝載展示記錄后轉成json返回給前端(key為記錄的id)
最終展示在Chrome瀏覽器的結果是未排序的原始數據,相當于我查詢時候的排序白做了。
2. 為什么會這樣?
這主要是因為ECMAScript 6(ES6)規范中明確定義了對象屬性的枚舉順序。當對象的屬性名都是數字或字符串時,這些屬性會按照屬性名在字符編碼中的順序進行排序。Chrome瀏覽器遵循了這一規范,因此在處理JSON數據時會自動按鍵值排序。
假設你原來的JSON數據是這樣的:
{"4": "444","1": "111","6": "66","9": "9"
}
瀏覽器會自動將其排序為:
{"1": "111","4": "444","6": "66","9": "9"
}
3.如何解決?
我的解決方案是修改數據結構,避免使用直接以數字或字符串作為鍵的對象。數據結構轉為List結構,其中每個元素都是一個包含鍵值對的對象。這樣,自己就可以控制數據的順序,而不用擔心瀏覽器會自動排序。
json格式如下:
[{"id": 4, "name": "444"},{"id": 1, "name": "111"},{"id": 6, "name": "66"},{"id": 9, "name": "9"}
]
啊啊啊啊啊啊,一開始沒忘這方面想,硬控我好久。。。。。,希望能夠幫助到后面遇到相同問題的朋友