您好,我正在开发一个聊天应用程序,我想对新消息进行排序并根据时间保持历史记录顺序。
例如,我将聊天消息放在这样的数组中,现在我使用每个消息对象上的“时间”键对它们进行排序!
[{"user":"a", "msg":"Hi ", "read":true, "time":1}
{"user":"b", "msg":"Hi ", "read":false, "time":2}
{"user":"c", "msg":"Hi ", "read":false, "time":3}
{"user":"d", "msg":"Hi ", "read":true, "time":4}
{"user":"e", "msg":"Hi ", "read":true, "time":5}]
我还如何使用“读取”键对它们进行排序,其中所有错误值都应位于顶部,但其余对象应使用“时间”键进行排序。
比如像这样
[{"user":"b", "msg":"Hi ", "read":false, "time":2}
{"user":"c", "msg":"Hi ", "read":false, "time":3}
{"user":"a", "msg":"Hi ", "read":true, "time":1}
{"user":"d", "msg":"Hi ", "read":true, "time":4}
{"user":"e", "msg":"Hi ", "read":true, "time":5}]
最佳答案
你可以使用 Array#sort
以及排序顺序的回调并链接所需的排序参数。
此回调在计算中使用 bool 值到数字的隐式转换。
var array = [{ "user": "a", "msg": "Hi ", "read": true, "time": 1 }, { "user": "b", "msg": "Hi ", "read": false, "time": 2 }, { "user": "c", "msg": "Hi ", "read": false, "time": 3 }, { "user": "d", "msg": "Hi ", "read": true, "time": 4 }, { "user": "e", "msg": "Hi ", "read": true, "time": 5 }];
array.sort(function (a, b) {
return a.read - b.read || a.time - b.time;
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于Javascript 按顺序排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40060818/