Search code examples
javascriptjavascript-objects

Get an array from nested objects


i have nested object users

let users = {
    '0LsRDanmw1s1KBvZAAAC': 
    { 
        name: 'user1',
        room: 'Lobby' 
    },
    'Qvd9v0EStnwNe11mAAAD': 
    { 
        name: 'user2',
        room: 'Music' 
    },

};

I want to get an array of users where room === 'Lobby'

let onlineUsers = ['user1'];

Thanks in advance

edit: alot of good solutions thank you guys!


Solution

  • Get values, execute .filter() and then .map().

    let users = {    '0LsRDanmw1s1KBvZAAAC':     {         name: 'user1',        room: 'Lobby'     },    'Qvd9v0EStnwNe11mAAAD':     {         name: 'user2',        room: 'Music'     },};
    
    var onlineUsers = Object.values(users)
                            .filter(u => u.room === 'Lobby')
                            .map(u => u.name);
    
    console.log(onlineUsers );
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    Or you can get values and execute .reduce().

    let users = {    '0LsRDanmw1s1KBvZAAAC':     {         name: 'user1',        room: 'Lobby'     },    'Qvd9v0EStnwNe11mAAAD':     {         name: 'user2',        room: 'Music'     },};
    
    var onlineUsers = Object.values(users)
                            .reduce((a, u) => (u.room === 'Lobby' ? [...a, u.name] : a), []);
    
    
    console.log(onlineUsers);
    .as-console-wrapper {
      max-height: 100% !important;
      top: 0;
    }