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?
apply(context, argsArray) calls function in the given context, passing argsArray as the arguments for function. In this case, function is []. splice , which takes the following parameters, in this this order: index - at which to start changing the array.
The splice() method returns the removed item(s) in an array and slice() method returns the selected element(s) in an array, as a new array object. 2. The splice() method changes the original array and slice() method doesn't change the original array.
To sort an array, without mutating the original array:Call the slice() method on the array to get a copy. Call the sort() method on the copied array. The sort method will sort the copied array, without mutating the original.
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With