Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.sort()重新定位已读邮件_Javascript_React Native_Sorting_Split_Splice - Fatal编程技术网

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”如果它真的这样做了,然后将索引保存到地图上,然后继续循环以查找下一个有未读消息的聊天,但这似乎会非常耗时,而且不必要现在有点分心,但是如果你被数组困住了,循环似乎是唯一的方法。如果您不需要使用阵列,请使用性能更高的数据结构。