按值排序对象

时间:2016-07-15 05:48:23

标签: javascript sorting object

我有一个包含聊天列表的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示例..

2 个答案:

答案 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对象来保证关键顺序。