2016-11-08 72 views
-1

您好我正在开发一个聊天应用程序,我想对新消息进行排序,并根据时间保留历史顺序。使用两个键的Javascript排序数组

例如,我有聊天消息在这样

[{"user":"a", "msg":"Hi ", "msg_count":1, "unix_time":"1474476800000"} 
{"user":"b", "msg":"Hi ", "msg_count":1, "unix_time":"1478776800000"} 
{"user":"c", "msg":"Hi ", "msg_count":5, "unix_time":"1479276800000"} 
{"user":"d", "msg":"Hi ", "msg_count":1, "unix_time":"1478416800000"} 
{"user":"e", "msg":"Hi ", "msg_count":3, "unix_time":"1478476800000"}] 

数组如何我也使用“MSG_COUNT”键,所有更大的价值应该来在上面进行排序,但剩下的对象应用“unix_time”键排序。

+0

你可以使用data.sort() – Vikrant

+0

可能是你正在寻找这个http://stackoverflow.com/questions/6913512/how-to-sort-an-array-对象由多个字段 – Nitheesh

+2

@Cerbrus你甚至读过我的问题吗?我有一个数字和一个字符串属性来排序!所有这些链接都没有! – Tuna

回答

1

使用Array#sort方法与自定义比较功能。

var data=[{"user":"a", "msg":"Hi ", "msg_count":1, "unix_time":"1474476800000"}, 
 
{"user":"b", "msg":"Hi ", "msg_count":1, "unix_time":"1478776800000"}, 
 
{"user":"c", "msg":"Hi ", "msg_count":5, "unix_time":"1479276800000"}, 
 
{"user":"d", "msg":"Hi ", "msg_count":1, "unix_time":"1478416800000"}, 
 
{"user":"e", "msg":"Hi ", "msg_count":3, "unix_time":"1478476800000"}]; 
 

 

 
data.sort(function(a, b) { 
 
    // return the difference of `msg_count` property to sort based on them 
 
    // if they are equal then sort based on unix_time prop 
 
    return b.msg_count - a.msg_count || 
 
    b.unix_time - a.unix_time; 
 
}) 
 

 
console.log(data)

+0

不错的一个,你可以添加unix_time键的排序吗 – Tuna

+0

@Tuna:他已经在那里实现了'unix_time'排序。 – Cerbrus

+0

@Tuna:以何种顺序 –