如何基于已排序chats数组重新排列独立的users数组?
解决方案
步骤1:提取并整理目标用户顺序
遍历已按updatedAt排序的原chats数组,收集每个聊天中排除当前用户后的用户ID,同时去重(只保留首次出现的顺序),全程不修改原数组:
const currentUserId = 'userId1'; const userOrder = []; const seenUserIds = new Set(); // 遍历原chats数组,不做任何修改 chats.forEach(chat => { // 定位当前聊天中除登录用户外的目标用户(假设为双人聊天场景) const targetUser = chat.users.find(user => user.id !== currentUserId); if (targetUser && !seenUserIds.has(targetUser.id)) { seenUserIds.add(targetUser.id); userOrder.push(targetUser.id); } });
步骤2:对独立users数组排序
基于上面得到的userOrder顺序,对独立的users数组排序,同时保留原数组不受影响:
// 先复制原users数组再排序,避免修改原数据 const sortedUsers = [...users].sort((a, b) => { const indexA = userOrder.indexOf(a.id); const indexB = userOrder.indexOf(b.id); // 按chat中出现的先后顺序排列,未出现在chat中的用户排在最后 if (indexA !== -1 && indexB !== -1) { return indexA - indexB; } return indexA === -1 ? 1 : -1; });
关键注意事项
- 全程使用
forEach、find等只读方法遍历原chats数组,绝对不修改原数组内容; - 通过扩展运算符
[...users]复制原用户数组后再排序,保证原users数组的完整性; - 用
Set做去重处理,确保同一个用户仅在排序依据中保留首次出现的位置。
内容的提问来源于stack exchange,提问作者sgt_pepper85
相关产品推荐
相关产品推荐

