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);
    });
});