softvar
softvar

Reputation: 18445

delete associative array values which is nested inside Object

DEMO FIDDLE

I have the following structure of my working scenario.

Object {room1: Array[2], room2: Array[3], room3: Array[1]}

I'm adding values using:

function addValue(obj, key, value, socketId) {
if (obj.hasOwnProperty(key))
    obj[key].push({socketid: socketId, user: value});
else 
    obj[key] = [{socketid: socketId, user: value}];
}

Now I want to delete a particular row-entry from Array. So knowing all the three fields- obj, key and value, delete this particular thing from array.

So for eg., if I have

addValue(online, "room1","userA1","sA1");
addValue(online, "room1","userA2","sA2");
addValue(online, "room2","userB1","sB1");
addValue(online, "room2","userB2","sB2");
addValue(online, "room2","userB3","sB3");
addValue(online, "room3","user3","s3");

something like:

{ 
    room1: {socketid : sA1, user: userA1},
           {socketid : sA1, user: userA1},
    room2: {socketid : sB1, user: userB1},
           {socketid : sB2, user: userB2},
           {socketid : sB3, user: userB3},
    room3: {socketid : s3,  user: user3}
}

Now I want to delete the row which has key=sB2 and value=userB2.

So HOW TO finally have something like:

{ 
    room1: {socketid : sA1, user: userA1},
           {socketid : sA1, user: userA1},
    room2: {socketid : sB1, user: userB1},
           {socketid : sB3, user: userB3},
    room3: {socketid : s3,  user: user3}
}

DEMO FIDDLE

Upvotes: 0

Views: 72

Answers (1)

georg
georg

Reputation: 215009

For example

function deleteValue(obj, key, value, socketId) {
    if (!obj.hasOwnProperty(key))
        return;
    obj[key] = obj[key].filter(function(x) {
        return x.user != value || x.socketid != socketId
    })
}

http://jsfiddle.net/k3McA/1/

Upvotes: 1

Related Questions