array.sort() 重新定位已读消息
array.sort() to reposition a read message
我有一个用户对象(聊天)数组,我想将所有带有未读消息的聊天推到列表顶部的前面,而不影响其余的聊天位置。
这是我目前所拥有的。每次与 hasUnread
的新聊天通过时,未读消息都会被推到列表的顶部 但是 其他所有聊天都会重新排列。
const singleChat = [...Object.values(singles)];
singleChat.sort((a, b) => (a.hasUnread == false ? 1 : -1));
我想是因为我需要指定我要拉出的索引和我要将它推回的索引。
我在想这样的事情:Move an array element from one array position to another但是能够破译旧位置似乎有点混乱。
if (new_index >= chat.length) {
var k = new_index - chat.length + 1;
while (k--) {
chat.push(undefined);
}
}
chat.splice(new_index, 0, chat.splice(old_index, 1)[0]);
任何帮助都会很棒。
我不得不使用一个循环,它有点慢,但这个有效:
let unreadmessages = [];
for (let i = 0; i < singleChat.length; i++) {
if (singleChat[i].hasUnread === true) {
unreadmessages.push(singleChat[i]);
singleChat.splice(i, 1);
}
}
let newOrderedSingleChats = unreadmessages.concat(singleChat);
我有一个用户对象(聊天)数组,我想将所有带有未读消息的聊天推到列表顶部的前面,而不影响其余的聊天位置。
这是我目前所拥有的。每次与 hasUnread
的新聊天通过时,未读消息都会被推到列表的顶部 但是 其他所有聊天都会重新排列。
const singleChat = [...Object.values(singles)];
singleChat.sort((a, b) => (a.hasUnread == false ? 1 : -1));
我想是因为我需要指定我要拉出的索引和我要将它推回的索引。
我在想这样的事情:Move an array element from one array position to another但是能够破译旧位置似乎有点混乱。
if (new_index >= chat.length) {
var k = new_index - chat.length + 1;
while (k--) {
chat.push(undefined);
}
}
chat.splice(new_index, 0, chat.splice(old_index, 1)[0]);
任何帮助都会很棒。
我不得不使用一个循环,它有点慢,但这个有效:
let unreadmessages = [];
for (let i = 0; i < singleChat.length; i++) {
if (singleChat[i].hasUnread === true) {
unreadmessages.push(singleChat[i]);
singleChat.splice(i, 1);
}
}
let newOrderedSingleChats = unreadmessages.concat(singleChat);