我有一个包含聊天列表的JS对象。我需要的是根据 last_message_at 值(这是一个纪元(Unix))按照desc顺序对它们进行排序。
Object的结构如下所示
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
。数组可用于排序目的,但最终结果应为Object。
尝试了一些没有运气的stackoverflow示例..
答案 0 :(得分:1)
有许多重要问题禁止您尝试完成的确切步骤,因此我采取了一种快速方法,可以做我认为的事情>你想要的 - 即枚举对象的键并按k
的数字值排序
last_message_at
此函数返回一个数组(因为它必须)。正如@jfriend00所指出的,对象属性顺序在Javascript中永远不会得到保证。
另一个要点是你不能拥有一个带有重复键的对象 - 你提供的Object.keys(test)
.sort((a,b) => {
return test[a].otherUser.last_message_at - test[b].otherUser.last_message_at; })
.map((elt) => { return test[elt]; });
对象在对象的初始化完成时只有一个键。
答案 1 :(得分:0)
Javascript中无法保证对象中属性的顺序。
ECMAScript中对象的定义:
4.3.3对象
对象是Object类型的成员。这是一个无序的 属性集合,每个属性包含原始值, 对象或功能。存储在对象属性中的函数是 称为方法。
您应该使用数组或map对象来保证关键顺序。