从HTTP响应自动更改字典顺序/排序

时间:2017-06-06 06:50:03

标签: angular typescript

我的API返回以下字典:

"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
}

当我在Angular中收到它时,它重新排序字典并按键而不是按值对它们进行排序。所以我得到这样的东西

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

为什么呢?我是否必须为此KVP定义一个模型,我告诉它键是字符串而不是数字?我该怎么做?

我不希望在后端和前端对数据进行排序。

1 个答案:

答案 0 :(得分:0)

  

为什么?

问题是the way that the ECMAScript spec specifies this behavior(这实际上只反映了运行时如何实现这一点。

  
      
  1. 让密钥成为新的空列表。
  2.   
  3. 对于作为整数索引的O的每个自有属性键P,按升序数字索引顺序,执行      
        
    1. 将P添加为键的最后一个元素。
    2.   
  4.   
  5. 对于作为字符串但不是整数索引的O的每个自有属性键P,按照属性创建的按时间顺序递增,      
        
    1. 将P添加为键的最后一个元素。
    2.   
  6.   
  7. 对于作为符号的O的每个自有属性密钥P,按照属性创建的递增时间顺序,执行      
        
    1. 将P添加为键的最后一个元素。
    2.   
  8.   
  9. 返回键。
  10.   

基本上,积分键将始终以递增(递增)顺序排在第一位。

与jonrsharpe提到的一样,你应该使positions成为一个数组,可以是键/值对对象,也可以是其他可以作为元组的数组。