Javascript indexOf 2 个可互换参数

Javascript indexOf 2 interchangeable parameters

我正在使用 Socket.io、Express 和 MongoDB 制作带有身份验证的私人聊天应用程序。 我想找到一个具有字符串 ID room = socket.id + selectedUser 的房间,其中 selectedUser 是来自用户数组的 id。

如何找到房间的索引位置,"socket.id && selectedUser"可以互换? 它的工作原理与 .indexOf(X + Y) 类似,但我想要类似 .indexOf(X && Y) 的结果:XY 或 YX。

[
  '3e3rDZvLGm3debQGAAAA',
  'cIY-he4BJFOxvdF8AAAB',
  '5eac61e5e481853528f4ef115eac61fde481853528f4ef13',
  '3e3rDZvLGm3debQGAAAA'
]

var IndexPosition = Object.keys(this.adapter.rooms).indexOf(socket.id + selectedUser);

我的伪代码思路:
"find the room having X & Y, even if synax is YX or XY"
用户 1 - 5eac61e5e481853528f4ef11
用户 2 - 5eac61fde481853528f4ef13,

可能的结果:
5eac61fde481853528f4ef135eac61e5e481853528f4ef11

5eac61e5e481853528f4ef115eac61fde481853528f4ef13

有几种方法可以做到这一点:

  1. 检查两个选项。
var keys = Object.keys(this.adapter.rooms);
var index = keys.indexOf(socket.id + selectedUser);
if (index == -1) // not found
    index = keys.indexOf(socket.id + selectedUser);
  1. 格式标准化。这样做可以确保顺序不会影响最终结果。
var keys = Object.keys(this.adapter.rooms);
var joinedId = socket.id > selectedUser // this lexicographically compares two strings
    ? socket.id + selectedUser
    : selectedUser + socket.id;
var index = keys.indexOf(joinedId);

虽然我不知道具体细节,但避免使用 Object.keys() 时使用 Map 会更合适。这也意味着您可以使用 this.adapter.rooms.keys() 而不是慢得多的 Object.keys(this.adapter.rooms).