我正在尝试管理我的应用中登录的每个用户的位置/顺序。 我创建了一个每次有人进入时都会更新的数组。 到现在为止,它工作正常。
[...]
var row_of_users=[];//my array of users.
var visits=0;//just a count of users logged in.
io.on('connection', function(socket){
var user=socket.id;
visits++;
row_of_users.push(user);
console.log(row_of_users);
[...]
console.log中的显示:
[' BnUtfcyNniEWNwN3AAAA', ' IkE3l4oMBXt5dEsOAAAB&#39 ;, ' t5gzbSru7oDR44T7AAAC&#39 ;, ' yB2X4G55YqcvDgHcAAAD' ]
但是当用户离开时,socket.io会忽略user.id并删除数组中的最后一个对象。
socket.on('disconnect', function(){
visits--;
row_of_users.pop(user);
});
如果我在console.log中关闭浏览器中的第一个用户标签(** BnUtfcyNniEWNwN3AAAA ),现在显示:**
[' BnUtfcyNniEWNwN3AAAA', ' IkE3l4oMBXt5dEsOAAAB&#39 ;, ' t5gzbSru7oDR44T7AAAC' ]
就像最后一个用户断开连接一样。
这里发生了什么?以及如何正确更新阵列? 我没有发布整个代码,因为我的语言是葡萄牙语,变量也是葡萄牙语。
答案 0 :(得分:1)
array.pop()
不会接受任何参数,并且会始终弹出最后一个元素。
pop()方法从数组中删除最后一个元素并返回该元素。
要删除第N个元素,请使用:
array.splice(N, 1)
或者在你的情况下:
row_of_users.splice(row_of_users.indexOf(user), 1)
答案 1 :(得分:0)
你的答案就在这里:How do I remove a particular element from an array in JavaScript?
基本上,您将使用indexOf(socket.id)并从row_of_users数组中拼接该索引。