Javascript indexOf 2个可互换参数

问题描述 投票:0回答:1

我正在使用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是 YXXY"用户1--5eac61e5e481853528f4ef11用户2--5eac61fde481853528f4ef13。

可能的结果。5eac61fde481853528f4ef135eac61e5e481853528f4ef11或5eac61e5e481853528f4ef115eac61fde481853528f4ef13。

javascript arrays node.js socket.io chat
1个回答
0
投票

有几个方法可以做到这一点。

  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).

© www.soinside.com 2019 - 2024. All rights reserved.