Reputation: 185
I have a rooms object, inside that object has many rooms array, and in each room there are users element.
var rooms = {"room1":["user1","user2"],"room2":["user1","user2","user3"]};
How do I write a function that remove a specific user from the rooms array when called?
function leaveRoom(user,room){
if(typeof room != "undefined"){
//remove user from the specific room ONLY if room argument is passed
} else {
//remove user from all rooms
}
}
I have tried to use splice with the index of the element but it doesn't work.
Array.prototype.remove = function(value) {
if (this.indexOf(value)!==-1) {
this.splice(this.indexOf(value), 1);
return true;
} else {
return false;
};
}
var roomName="room1",
userName="user1";
rooms[roomName].remove(userName);
actually I'm not even sure if it is an object or array anymore. Please help thanks
Upvotes: 0
Views: 387
Reputation: 871
I have made it using for..in
loop and slice
. Hope this will help you
var rooms = {
"room1": ["user1", "user2"],
"room2": ["user1", "user2", "user3"],
"room3": ["user1", "user2", "user3"]
};
function leaveRoom(user, room) {
for (var eachroom in rooms) {
if (eachroom == room) {
var users = (rooms[eachroom]);
for (var user_index in users) {
if (users[user_index] == user) {
users.splice(user_index, 1);
break;
}
}
rooms[eachroom] = users;
break;
}
}
//checking whether the user is removed
for (var i in rooms) {
var j = (rooms[i]);
alert(i+":"+j);
}
}
leaveRoom('user2', 'room3');
Link to jsfiddle: https://jsfiddle.net/kannanore/s6u6m5fn/3/
Upvotes: 1
Reputation: 1
You can use for..in
loop, delete
, Array.prototype.filter()
to remove element having value undefined
from array
var rooms = {
"room1": ["user1", "user2"],
"room2": ["user1", "user2", "user3"]
};
function leaveRoom(user, room, obj) {
if (room && Array.isArray(obj[room])) {
delete obj[room][obj[room].indexOf(user)];
} else {
for (var prop in obj) {
delete obj[prop][obj[prop].indexOf(user)];
}
};
for (var prop in obj) {
obj[prop] = obj[prop].filter(Boolean)
}
}
leaveRoom("user1", "room1", rooms);
console.log(rooms); // remove `"user1"` from `"room1"`
// pass `null` as second parameter to remove `user` from all rooms
leaveRoom("user2", null, rooms); // remove `"user2"` from all rooms
console.log(rooms);
Upvotes: 1