gpt4 book ai didi

javascript - 将对象数组按最新日期排序

转载 作者:行者123 更新时间:2023-12-03 05:50:23 26 4
gpt4 key购买 nike

我正在制作一个聊天应用程序,所有联系人都保存为一个数组中的对象:

var contacts = [{name: "Ruud", age: 20},{name: "Elke", age: 17}];

比我将每个联系人的聊天消息保存在对象数组中:

var message_ruud = [{mes: "Hi", date: 1477064075},{mes: "Ok", date: 1477066075}];
var message_elke = [{mes: "Lol", date: 1477069075},{mes: "Ok", date: 1477063075}];

现在将显示联系人外壳,按具有最高(即最新时间)时间戳的联系人排序。如何做到这一点(尽可能快)?

编辑(因为问题不清楚):

最后,我想要将联系人的输出排序到最新消息发送的位置,以找出最新消息的位置,您有消息数组(如 _ruud、_elke)。

var contacts = [{name: "Ruud"},{name: "Elke"}];
var message_elke = [{msg: "Hi",date: 20}];
var message_ruud = [{msg: "Hello",date: 10}];

document.getElementById("contacts").innerHTML = contacts[0].name+"</br>"+contacts[1].name;
<div id="contacts"></div>
它不应该按这个顺序显示,而是像这样:ELKE,RUUD,因为最后一条消息已写入 Elke

最佳答案

使用Array.prototype.sort查看下面的演示从最新到最旧的顺序对 message_ruud 数组进行排序 - 您可以对 message_elke 执行相同操作:

var message_ruud = [{mes: "Hi", date: 1477064075},{mes: "Ok", date: 1477066099}];

var result = message_ruud.sort(function(a,b){
return (b.date - a.date) || 0;
});

console.log(result);

编辑:

也许这会为您指明正确的方向 - 内联解释:

var contacts = [{name: "Ruud"},{name: "Elke"}];
var message_elke = [{msg: "Hi",date: 20}, {msg: "Hi",date: 30 }];
var message_ruud = [{msg: "Hello",date: 10}, {msg: "Hello",date: 400}];

var result = contacts.sort(function(a, b) {

// find max date for Ruud
var ruud_max = message_ruud.map(function(element) {
return element.date;
}).reduce(function(a, b) {
return Math.max(a, b);
}, 0);

// find max date for Elke
var elke_max = message_elke.map(function(element) {
return element.date;
}).reduce(function(a, b) {
return Math.max(a, b);
}, 0);

// sort the contacts array
return (elke_max - ruud_max) || 0;
});

console.log(result);

编辑 2:

考虑有很多联系人的情况 - 您需要重新考虑数据结构。所以,看起来有点复杂!您可以通过扩展消息联系人的数据结构来测试它:

var contacts = [{
name: "Ruud"
}, {
name: "Elke"
}, {
name: "Alan"
}];

var messages = [{
name: "Ruud",
message: [{
msg: "Hello",
date: 10
}, {
msg: "Hello",
date: 400
}]
}, {
name: "Elke",
message: [{
msg: "Hi",
date: 20
}, {
msg: "Hi",
date: 30
}]
}, {
name: "Alan",
message: [{
msg: "Hi there",
date: 20
}, {
msg: "Lol",
date: 40
}]
}];

var result = contacts.sort(function(x, y) {

var max_date_x = messages.find(function(element){
return element.name === x.name;
}).message.map(function(element) {
return element.date;
}).reduce(function(a, b) {
return Math.max(a, b);
}, 0);

var max_date_y = messages.find(function(element){
return element.name === y.name;
}).message.map(function(element) {
return element.date;
}).reduce(function(a, b) {
return Math.max(a, b);
}, 0);

// sort the contacts array
return (max_date_y - max_date_x) || 0;
});

console.log(result);

关于javascript - 将对象数组按最新日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40180625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com