Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JavaScript数组中删除WebSocket对象?_Javascript_Arrays_Json_Object_Websocket - Fatal编程技术网

如何从JavaScript数组中删除WebSocket对象?

如何从JavaScript数组中删除WebSocket对象?,javascript,arrays,json,object,websocket,Javascript,Arrays,Json,Object,Websocket,我目前正在向数组中添加一个WebSocket客户端对象,以便将它(通过索引)与另一个用户信息数组相匹配,以确定哪个用户属于哪个客户端/套接字/会话 var users = []; var clients = []; ... wss.on('connection', function connection(ws) { clients.push(ws); var i = clients.indexOf(ws); if(i > -1) { users.p

我目前正在向数组中添加一个WebSocket客户端对象,以便将它(通过索引)与另一个用户信息数组相匹配,以确定哪个用户属于哪个客户端/套接字/会话

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对象的一部分插入到“users”数组中。但是,当我试图在连接关闭时删除相同的
ws
对象时,
-1
将为
indexOf(ws)
返回。但它肯定应该返回
0
,因为它与以前使用的对象(连接)相同,并且仍然存在于客户机数组的索引0中


为什么indexOf()在“close”处理程序中返回-1?

如果在节点中使用
ws
模块,则
close
事件侦听器不会将
WebSocket
作为其第一个参数。这是电话,不是插座

相反,在外部
ws
变量中已经有了套接字。不要使用名为
ws
的参数对其进行阴影处理,您的代码应该可以正常工作:

ws.on('close', function(code, message) {
    var i = clients.indexOf(ws);
    //...
});