В настоящее время я добавляю объект клиента WebSocket к массиву, чтобы я мог сопоставить его (по индексу) с другим массивом информации о пользователе, чтобы определить, какой пользователь принадлежит к тому клиенту/сокету/сеансу.Как удалить объект WebSocket из массива JavaScript?
var users = [];
var clients = [];
...
wss.on('connection', function connection(ws) {
clients.push(ws);
var i = clients.indexOf(ws);
if(i > -1) {
users.push({
id: i,
user: "",
room: "",
client: clients[i],
});
}
ws.on('close', function(ws) {
var i = clients.indexOf(ws); //i = -1
if(i > -1) {
// remove this client and user...
}
});
ws.on('message', function incoming(message) {
// do stuff
});
});
Я могу получить индекс ws
объекта (который возвращает 0), так что я могу вставить объект как часть объекта JSON на «пользователь» массив штраф. Но когда я пытаюсь удалить тот же объект ws
, когда соединение закрыто, возвращается -1
для indexOf(ws)
. Но, конечно же, он должен возвращать 0
, поскольку это тот же объект (соединение), который использовался ранее, и все еще присутствует в индексе 0 в массиве клиентов?
Почему indexOf() возвращает -1 в обработчике «close»?