2017-06-06 63 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一样,你应该可以创建一个数组,或者是键/值对对象,或者其他可以作为元组的数组。