1

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

例子:

[
    {
        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

怎么做?

4

2 回答 2

2

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

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

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

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

不是开玩笑,例如,如果你有一个数字数组并调用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;
}

或相反,这取决于您是否希望最近的消息首先或最后

于 2013-09-03T07:03:00.843 回答
1
arr.sort(function(a, b) {
    return a.last_message.timestamp - b.last_message.timestamp;
});
于 2013-09-03T07:05:42.847 回答