2017-06-06 78 views
0

我的API返回以下字典:自動更改字典順序/排序從HTTP響應

"positions": { 
    "31": 18, 
    "25": 12, 
    "23": 12, 
    "22": 12, 
    "19": 12, 
    "26": 9, 
    "21": 9, 
    "29": 9, 
    "20": 9, 
    "30": 9, 
    "24": 6, 
    "27": 6, 
    "28": 6, 
    "17": 3 
} 

當我收到這在棱角分明,它重新排序的字典,並通過鍵,而不是通過值排序。所以我得到這樣的東西

"positions": { 
    "17": 3, 
    "19": 12, 
    "20": 9, 
    ... 
} 

爲什麼?我是否必須爲這個KVP定義一個模型,我告訴它這些鍵是字符串而不是數字?我會怎麼做?

我不想在後端和前端對我的數據進行排序。

+2

對象密鑰不保證排序。如果你想要一些特定的順序,使用一個數組或明確應用它。 – jonrsharpe

回答

0

爲什麼?

的問題是the way that the ECMAScript spec specifies this behavior(這僅僅是一個怎樣的運行時間已經實現了這種反映。

  1. 讓按鍵是一個新的空列表。
  2. 對於每一個自己的財產P鍵O是一個整數索引,按照數字索引順序遞增,do
    1. 將P添加爲鍵的最後一個元素。
  3. 鄰的每一個自己的財產P鍵是一個字符串,但不是整數指數,上升的創造的時間順序,做
    1. 添加數p作爲鍵的最後一個元素。
  4. 鄰的每一個自己的財產P鍵是一個符號,在提升性能的創作時間順序,做
    1. 添加數p作爲鍵的最後一個元素。
  5. 返回鍵。

因此,基本上,整數鍵總是以升序(增加)順序排在第一位。

像提到的jonrsharpe一樣,你應該可以創建一個數組,或者是鍵/值對對象,或者其他可以作爲元組的數組。