2016-07-15 120 views
1

我有一個包含聊天列表的JS對象。我需要的是按照last_message_at值的順序對它們進行排序,這是一個紀元(Unix)。按值排序對象

對象的是結構法如下

var test = { 
    "138545616542461": { 
     "otherUser": { 
      "$id": "128636544201178", 
      "$priority": null, 
      "age": 35 
     }, 
     "last_message_at": 1268482500 
    }, 
    "138545616542460": { 
     "otherUser": { 
      "$id": "128636544201178", 
      "$priority": null, 
      "age": 35 
     }, 
     "last_message_at": 1368482500 
    } 
}; 

典型地,排序對象應在頂部具有1368482500。數組可以用於排序目的,但最終結果應該是一個對象。

試過,沒有運氣一些計算器的例子..

+4

如果您期望對對象上的對象的鍵進行排序,則正在使用錯誤類型的數據結構。爲排序順序使用數組,而不是普通對象。 – jfriend00

回答

1

有許多的禁止你要完成,所以我已經採取了快速的方法的自由,做什麼確切步驟是很重要的問題我認爲你想要的 - 即枚舉對象的按鍵和按last_message_at

Object.keys(test) 
     .sort((a,b) => { 
      test[a].otherUser.last_message_at - test[b].otherUser.last_message_at) 
     .map((elt) => test[elt]); 
數字值排序0

該函數返回一個數組(因爲它必須)。正如@jfriend00指出的,對象屬性的順序在JavaScript中從未得到保證。

另一個要點是你不能有一個對象有重複鍵 - 當你完成對象的初始化時,你提供的對象只有一個鍵。

+0

但是我在這麼做的時候丟了鑰匙 –

+0

是的,這是完全正確的 - 你不能擁有一個帶有重複鍵的對象。 –

+0

但密鑰不同..請參閱密鑰的最後1和0結尾 –

0

Javascript中不保證對象中屬性的順序。從ECMAScript的對象的

定義:

4.3.3對象

一個目的是對象的類型的成員。它是一個無序的 屬性集合,每個屬性都包含一個原始值, 對象或函數。存儲在對象屬性中的函數是 ,稱爲方法。

您應該使用保證鍵順序的數組或map對象。