从数组中删除Javascript?

时间:2012-02-09 19:54:39

标签: javascript arrays socket.io

我有这样的事情:

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

 });
 });

3 个答案:

答案 0 :(得分:1)

然后,splice()方法就是你的朋友。使用delete擦除索引。另外,使用

获取id
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删除它们


修改

考虑到问题中添加的代码,我认为您可以执行以下操作:

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