Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
60
rated 0 times [  61] [ 1]  / answers: 1 / hits: 36111  / 11 Years ago, sun, june 30, 2013, 12:00:00

I am working on a chat and using an array to hold the users. Here is my problem:



User1 joins and is given Index 0 in the array via push.
User2 joins and is given Index 1 in the array via push.



User1 disconnects and is removed via splice.



NOW User2 becomes Index 0.



User1 reconnects and is given Index 1 via push.



User2 disconnects, and Index 1 is removed which is now User1.



This is of course causing a problem.



So my question is how can I remove the item from the array without the index of the other elements changing? Am I on the wrong track here?


More From » arrays

 Answers
110

Instead of removing the items from the array with splice(), why not just set the value to null or undefined?



Then when you're adding a new user, you can just scan through the array to find the first available slot.



javascript arrays are simply lists of items - they're not keyed to a specific key like you might be familiar with in PHP. So if you want to keep the same position in the array, you can't remove other items - you need to keep them, and just mark them as empty.






You might scan through something like this:



var users = [];
function addUser(user) {
var id = users.indexOf(null);
if (id > -1) {
// found an empty slot - use that
users[id] = user;
return id;
} else {
// no empty slots found, add to the end and return the index
users.push(user);
return users.length - 1;
}
}
function removeUser(id) {
users[id] = null;
}

[#77300] Friday, June 28, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
christianu

Total Points: 481
Total Questions: 124
Total Answers: 99

Location: Trinidad and Tobago
Member since Thu, Dec 1, 2022
2 Years ago
christianu questions
;