2016-07-15 122 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对象。