我有这样的事情:
var users = [];
然后我用它来添加到列表中:
users[session] = socket;
现在我需要能够从会话和套接字相同的用户中删除
我该怎么做? (它需要是普通的javascript,而不是jquery)
这适用于socket.IO,如果有人知道那是什么。
var users = [];
////////////////USER CONNECTED
io.sockets.on('connection', function (socket) {
socket.emit('connected');
socket.on('session', function (session) {
users[session] = socket;
socket.emit("session_established");
//ON USER DISCONNECTION/////
socket.on('disconnect', function () {
//need to remove from the users list here, because they are no longer connected//
socket.broadcast.emit('disconnect', { data : session});
});
});
});
答案 0 :(得分:1)
然后,splice()方法就是你的朋友。使用delete擦除索引。另外,使用
for (var i in users){
if i == users[i]
...
}
答案 1 :(得分:1)
小心,当你这样做时:
var users = [];
users[session] = socket;
你最终会得到一个数组,该数组的属性名称存储在会话变量中,也许你最好使用一个对象:
var users = {};
users[session] = socket;
如果您这样做,那么您可以使用delete
删除该属性,如下所示:
delete users[session];
如果您确实需要使用数组,请查看this link,并在方法部分中push将元素插入数组,splice删除它们3} p>
修改强>
考虑到问题中添加的代码,我认为您可以执行以下操作:
var users = [], indexInArray;
indexInArray = users.push({session: session, socket: socket}); //add an object to the array, and store it's position, you could add whatever you like here
indexInArray--;
//Now you can access your recently added value like: users[indexInArray].session or users[indexInArray].socket
//and to delete it
users.splice(indexInArray , 1);
答案 2 :(得分:0)
试试这个:
for(var x in users) {
if(users.hasOwnProperty(x) && x === users[x]) { // Might need ==, depending on your values
delete users[x];
}
}