2012-02-09 97 views
1

我有这样的事情:Javascript从数组中移除?

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

请举一个例子... – 2012-02-09 19:57:14

+3

你没有按照预期使用JS数组。实际上,您的第一行代码创建了一个JS数组实例,但是您使用方括号表示来操作该数组对象的属性,而不是在数组中添加/操作项目。结果,你已经混合了数组和对象的使用。为了向您展示我的意思,请在您的第二行发布代码后检查'users.length' ... – JAAulde 2012-02-09 20:00:52

+0

'session'是一个字符串吗? – 2012-02-09 20:01:47

回答

0

试试这个:

for(var x in users) { 
    if(users.hasOwnProperty(x) && x === users[x]) { // Might need ==, depending on your values 
     delete users[x]; 
    } 
} 
+0

'users [x] = undefined'不需要,因为该属性在下一行被删除 – 2012-02-09 19:58:42

+0

@AlexanderPavlov:已经删除:)我原本把它放进去,因为我不记得IE6是否有'delete'问题。然后我意识到,IE6应该死了,所以我不在乎。 – Ryan 2012-02-09 19:59:27

1

然后,拼接()方法是你的朋友。 使用delete删除索引。此外,获得使用

for (var i in users){ 
if i == users[i] 
... 
} 
+3

除了带有*数字索引*的数组之外,您不能使用'splice()',这可能不是,而您的循环与此相反。 – Ryan 2012-02-09 20:02:12

+0

你是对的,先生。 – Alfabravo 2012-02-09 20:12:52

1

细心的ID,当你这样做:

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); 
+0

为什么你需要遍历属性来删除一个属性? – 2012-02-09 20:03:03

+0

好的,我之前曾告诉过我应该使用[],之前使用过{}。 – 2012-02-09 20:03:39

+0

@AtesGoral Ouups,我的错误 – NicoSantangelo 2012-02-09 20:03:39