Javascript Socket.io不';t在断开连接后从数组中删除用户对象
Javascript Socket.io不';t在断开连接后从数组中删除用户对象,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,socket和user字段也被分配给aUser,然后它被推送到socketUsers数组中。这发生在用户登录之后,因为我们需要他们的用户数据 当用户断开连接时,控制台为我记录阵列,但用户仍然在那里(socket和userdata字段) 我做错了什么?您对数组的索引错误,将新套接字推到数组上不会使这些套接字的ID成为数组的索引,我可以告诉您,您可能应该改用对象 const socketUsers = []; io.on("connection", (socket) =>
socket
和user
字段也被分配给aUser
,然后它被推送到socketUsers
数组中。这发生在用户登录之后,因为我们需要他们的用户数据
当用户断开连接时,控制台为我记录阵列,但用户仍然在那里(socket和userdata字段)
我做错了什么?您对数组的索引错误,将新套接字推到数组上不会使这些套接字的ID成为数组的索引,我可以告诉您,您可能应该改用对象
const socketUsers = [];
io.on("connection", (socket) => {
socket.on("user", (userdata) => {
const aUser = { socket: socket, user: userdata };
socketUsers.push(aUser);
});
socket.on("disconnect", () => {
delete socketUsers[socket.id];
console.log(socketUsers);
});
});
如果您如此坚持使用数组,则必须手动搜索它以查找所需元素的索引
const socketUsers = {};
io.on("connection", (socket) => {
socket.on("user", (userdata) => {
const aUser = { socket: socket, user: userdata };
socketUsers[socket.id] = aUser;
});
socket.on("disconnect", () => {
delete socketUsers[socket.id];
console.log(socketUsers);
});
});
const socketUsers = [];
io.on("connection", (socket) => {
socket.on("user", (userdata) => {
const aUser = { socket: socket, user: userdata };
socketUsers.push(aUser);
});
socket.on("disconnect", () => {
socketUsers.splice(socketUsers.findIndex(elem => elem.socket.id === socket.id), 1);
console.log(socketUsers);
});
});