Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按值对对象排序_Javascript_Sorting_Object - Fatal编程技术网

Javascript 按值对对象排序

Javascript 按值对对象排序,javascript,sorting,object,Javascript,Sorting,Object,我有一个JS对象,其中包含聊天列表。我需要的是根据最后一条消息在值处按描述顺序对它们进行排序,该值是一个历元(Unix) 对象的结构如下所示 var test = { "138545616542461": { "otherUser": { "$id": "128636544201178", "$priority": null, "age": 35 }, "last_me

我有一个JS对象,其中包含聊天列表。我需要的是根据最后一条消息在值处按描述顺序对它们进行排序,该值是一个历元(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
。数组可以用于排序,但最终结果应该是一个对象


尝试了一些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结尾