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
有几种方法可以做到这一点:
- 检查两个选项。
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)
.
我正在使用 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
有几种方法可以做到这一点:
- 检查两个选项。
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)
.