Javascript 按值对对象排序
我有一个JS对象,其中包含聊天列表。我需要的是根据最后一条消息在值处按描述顺序对它们进行排序,该值是一个历元(Unix) 对象的结构如下所示Javascript 按值对对象排序,javascript,sorting,object,Javascript,Sorting,Object,我有一个JS对象,其中包含聊天列表。我需要的是根据最后一条消息在值处按描述顺序对它们进行排序,该值是一个历元(Unix) 对象的结构如下所示 var test = { "138545616542461": { "otherUser": { "$id": "128636544201178", "$priority": null, "age": 35 }, "last_me
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
。数组可以用于排序,但最终结果应该是一个对象
尝试了一些stackoverflow示例,但运气不佳 有许多重要问题禁止您尝试完成的确切步骤,因此我冒昧地使用了一种快速方法,可以实现我认为您想要的功能,即枚举对象的键,并按
last\u message\u at
Object.keys(test)
.sort((a,b) => {
return test[a].otherUser.last_message_at - test[b].otherUser.last_message_at; })
.map((elt) => { return test[elt]; });
此函数返回一个数组(因为它必须)。正如前面所指出的,对象属性顺序在Javascript中永远无法保证
需要指出的另一点是,您不能让一个对象具有重复的键——当对象初始化完成时,您提供的
测试对象将只有一个键。在Javascript中无法保证对象中属性的顺序
ECMAScript中对象的定义:
4.3.3目标
对象是类型对象的成员。这是一个无序的过程
每个属性都包含一个基元值的属性集合,
对象或函数。存储在对象属性中的函数是
调用一个方法
您应该使用保证键顺序的数组或对象。如果您希望对对象上某个对象的键进行排序,那么您使用的数据结构类型是错误的。对排序顺序使用数组,而不是普通对象。如果需要对象而不是数组,则它不是错误的数据类型!程序使用test[“138545616542460”]查找元素的速度比使用test.find(“138545616542460”)循环数组要快得多。复杂性从O(n)降到O(1)!!!但是我在做soYes时丢失了关键点,这是完全正确的——不能有一个具有重复关键点的对象。但是关键点是不同的。。请参见键的最后1和0结尾