某种内部内容

Sort of internal content

本文关键字:内部      更新时间:2023-09-26

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

示例:

[
    {
        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的对象的顺序吗。

怎么做

排序时,可以指定自定义比较函数

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;
}

或者相反,这取决于您希望最近的消息是第一个还是最后一个

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