Javascript индекс 2 взаимозаменяемых параметров - PullRequest
0 голосов
/ 09 мая 2020

Я использую Socket.io, Express и MongoDB, чтобы создать приложение для приватного чата с auth. Я хочу найти комнату со строковым идентификатором room = socket.id + selectedUser , где selectedUser - это идентификатор из массива с пользователями.

Как найти индекс позиция комнаты, где "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 , даже если синакс. YX или XY "
пользователь 1 - 5eac61e5e481853528f4ef11
пользователь 2 - 5eac61fde481853528f4ef13,

Возможные результаты:
5eac61fde481853528f4ef135eac61e5e481853528f4ef11
или
5eac61e5e481853528f4ef115eac61fde481853528f4ef13

1 Ответ

0 голосов
/ 10 мая 2020

Есть несколько способов сделать это:

  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);
Стандартизируйте формат. Это гарантирует, что порядок не повлияет на конечный результат.
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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...