如何根据子对象的值对对象进行排序?
示例:
[
{
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
无关。
怎么做?
答案 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;
});