内部内容的排序

时间:2013-09-03 06:56:39

标签: javascript sorting

如何根据子对象的值对对象进行排序?

示例:

[
    {
        name: 'Jhon',
        old: 20,
        last_message: {
            text: 'blah',
            timestamp: 1378188846
        }
    },
    {
        name: 'Bill',
        old: 45,
        last_message: {
            text: 'Hello, Jhon!',
            timestamp: 1378188956
        }
    },
    {
        name: 'Steave',
        old: 34,
        last_message: {
            text: 'Bye! ;)'
            timestamp: 1378188952
        }
    }
]

这应该是对象的顺序,与最大last_message.timestamp无关。

怎么做?

2 个答案:

答案 0 :(得分:2)

您可以在排序时指定自定义比较功能

my_list.sort(function(a, b){return ...});

如果a小于b,则应返回负数;如果a大于b,则返回正数;如果相等,则返回0。

顺便说一下,你真的应该传递一个函数,因为默认函数会将元素转换为字符串,然后比较字符串,这很少是你想要的,除非在这种情况下数组只包含字符串。

不开玩笑,例如你有一个数字数组并在其上调用sort,你会对结果感到惊讶

[1, 2, 3, 30, 20, 10]

默认情况下给出

[1, 10, 2, 20, 3, 30]

因为字符串转换。

在你的情况下,排序功能应该是

function(a, b) {
    return a.last_message.timestamp - b.last_message.timestamp;
}

或相反,取决于您是想要最近的消息还是最后的消息

答案 1 :(得分:1)

arr.sort(function(a, b) {
    return a.last_message.timestamp - b.last_message.timestamp;
});