Javascript array.sort()重新定位已读邮件
我为一个用户提供了一个对象数组(聊天),我希望在不影响其他聊天位置的情况下,将所有包含未读消息的聊天推到列表顶部的前面 这就是我目前所拥有的。每次通过Javascript array.sort()重新定位已读邮件,javascript,react-native,sorting,split,splice,Javascript,React Native,Sorting,Split,Splice,我为一个用户提供了一个对象数组(聊天),我希望在不影响其他聊天位置的情况下,将所有包含未读消息的聊天推到列表顶部的前面 这就是我目前所拥有的。每次通过hasinread进行新的聊天时,未读消息都会被推到列表的顶部,但其他聊天都会重新安排 const singleChat = [...Object.values(singles)]; singleChat.sort((a, b) => (a.hasUnread == false ? 1 : -1)); 我想这是因为我需要指定我要提取的索引和
hasinread
进行新的聊天时,未读消息都会被推到列表的顶部,但其他聊天都会重新安排
const singleChat = [...Object.values(singles)];
singleChat.sort((a, b) => (a.hasUnread == false ? 1 : -1));
我想这是因为我需要指定我要提取的索引和我要将其推回的索引
我想的是这样的:但是能够破译旧的位置似乎有点混乱
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);
let unreadmessages=[];
for(设i=0;i
您所说的“能够破译旧位置似乎有点混乱”是什么意思?@weltschmerz当我不知道项目在数组中的位置时,如何找到旧索引?我想我可以在singleChat对象中循环查找“hasUnread”如果它真的这样做了,然后将索引保存到地图上,然后继续循环以查找下一个有未读消息的聊天,但这似乎会非常耗时,而且不必要现在有点分心,但是如果你被数组困住了,循环似乎是唯一的方法。如果您不需要使用阵列,请使用性能更高的数据结构。