Javascript 什么是最好的方法来删除;“的父索引”;数组的类型?

Javascript 什么是最好的方法来删除;“的父索引”;数组的类型?,javascript,node.js,Javascript,Node.js,在这里输入code我正在制作一个nodejs应用程序。。。让我提出我的问题 //id = dinamic string.. "user1", "user2", "userX" usersArray = []; usersArray[id]["socket"] = socket; 当套接字结束时,我想从usersArray中删除[id]。。但此时,id不可用 socket.on('end', function () { ?........? socket.end(); });

在这里输入code
我正在制作一个nodejs应用程序。。。让我提出我的问题

//id = dinamic string.. "user1", "user2", "userX"  
usersArray = [];
usersArray[id]["socket"] = socket;
当套接字结束时,我想从usersArray中删除[id]。。但此时,
id
不可用

socket.on('end', function () {
    ?........?
    socket.end();
});

如何操作?

有一个
socket.id
,它可以作为每个套接字的标识符。然后,可以使用关联数组而不是
usersArray

var usersArray = {};
usersArray[socket.id] = some_user_data;

然后,您可以使用
delete usersArray[socket.id]

删除此条目,前提是您可以从套接字内部访问此id。在('end')函数中,您可以执行以下操作:

socket.on('end', function () {
    usersArray.splice(thisId, 1);
    socket.end();
});

取决于您将套接字添加到您的代码> USER数组(这似乎是一个<代码>对象<代码>,而不是一个<代码>数组< /代码>注意您的示例<<代码> ID>代码>,您可以考虑在向数组

中添加一个新的回调时将其添加到套接字中。
usersArray[someId].socket = socket;

// New callback to just delete the usersArray entry
usersArray[someId].socket.on('end', function() {
   delete usersArray[someId];
});
使当前的
插座保持不动。
上的:

socket.on('end', function () {
    /* No new code here, as the deletion happens
       when the socket is added to usersArray!
     */
    socket.end();
});

您应该使用普通对象
{}
而不是数组。然后让
socket
存储自己的
id
,或者如果在单独的函数调用中添加了每个额外的socket,则使用一个变量。确定。。你可以演示一下吗?
usersArray={}但请考虑将其改为<代码>用户<代码>或其他内容,以防止混淆。@艾略特-博纳维尔,而不是那样,我只是在这里使用一个对象。我会编辑以使其清晰。但我想使用数据库中的标识符。。。人们可以选择任何名称,在sockets端我没有用户id,因为我没有检查数据库看他是否应该留下来创建另一个关联数组,只需设置
arr[socket.id]=user\u id
,然后在需要时将其用作查找。断开连接后,将两者都清理掉。不过我会做相反的事情-保留
usersArray[socket.id]
并将数据库的
user\u id
存储在里面。Node.js代码通常需要通过“他的”套接字找到用户。@Elliot,请参阅我在数组中提到的可能不是数组。@Roonaan someId目前不可用time@Filipe,
someId
必须可用,因为您使用它将套接字分配给
usersArray
。这个解决方案的全部要点是,您在该代码块中的('end'
上创建另一个
,显式角色是只删除数组中的条目。您保持当前
打开状态('end'
未触及。提及
我现在只有套接字数据
,可以安全地假设
thisId
不可用。幸运的是,您可以在
套接字和
thisId
都可用的范围内轻松创建第二个或第三个事件处理程序。就在那里..Id不可用le@Roonaan哦,天哪,谢谢你指出这一点!我错了!