我正在使用Socket.io、Express和MongoDB来制作一个带有Auth的私人聊天应用,我想找到一个房间,它的字符串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);
我的伪代码的想法是:"找到具有以下功能的房间。X & Y,即使synax是 YX 或 XY"用户1--5eac61e5e481853528f4ef11用户2--5eac61fde481853528f4ef13。
可能的结果。5eac61fde481853528f4ef135eac61e5e481853528f4ef11或5eac61e5e481853528f4ef115eac61fde481853528f4ef13。
有几个方法可以做到这一点。
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);
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)
.