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);