我在玩 nodejs 和 socket.io,我想存储用户的套接字 ID 和名称。我做了一个构造函数
function user(socketid,name){
this.socketid = socketid;
this.name = name;
this.getName = function(){
return this.name;
};
this.getId = function(){
return this.socketid;
};
}
我将它们插入到这样的数组中
users[socket.id] = new user(socket.id,'jirka');
这导致用户是这样的
[ '/chat#nksuCQdzHgBwO7x8AAAA': user {
socketid: '/chat#nksuCQdzHgBwO7x8AAAA',
name: 'jirka',
getName: [Function],
getId: [Function] },
'/chat#nmORiKZ9xzklDuUCAAAB': user {
socketid: '/chat#nmORiKZ9xzklDuUCAAAB',
name: 'jirka',
getName: [Function],
getId: [Function] } ]
现在在断开连接事件中,我想通过 socket.id 从数组中删除它们
users.splice(socket.id,1);
但它不起作用。当我在数组中没有命名索引的情况下执行此操作并循环遍历它们时,如果它与套接字 ID 匹配,那么我将使用迭代器删除它们
users.splice(i,1);
这有效。你能帮我弄清楚如何从带有命名索引的数组中删除吗?
我的回答涉及问题的解决,但不涉及您具体提出的问题。这是最好的地方之一,“地图”数据类型适合使用。因此,我将放一个小例子来展示操作——
let socketStore = new Map();
//when you have something to store - a socketId and data
socketStore.set(socketId, data)
// when you want to delete the socketId
socketStore.delete(socketId)
一个非常好的地图参考 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句