繁体   English   中英

从嵌套对象获取数组

[英]Get an array from nested objects

我有嵌套的对象用户

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

};

我想获取一组用户,其中room === 'Lobby'

let onlineUsers = ['user1'];

提前致谢

编辑:很多好的解决方案,谢谢大家!

获取值,执行.filter()然后执行.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; } 

或者,您可以获取值并执行.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; } 

您可以获取数组的值,根据需要过滤并仅映射名称。

 var users = { '0LsRDanmw1s1KBvZAAAC': { name: 'user1', room: 'Lobby' }, 'Qvd9v0EStnwNe11mAAAD': { name: 'user2', room: 'Music' } }, result = Object .values(users) .filter(({ room }) => room === 'Lobby') .map(({ name }) => name); console.log(result); 

Object.valuesfiltermap组合:

 let users = {'0LsRDanmw1s1KBvZAAAC': { name: 'user1',room: 'Lobby' },'Qvd9v0EStnwNe11mAAAD':{ name: 'user2',room: 'Music' },}; const res = Object.values(users) .filter( o => o.room === 'Lobby') .map( o => o.name ); console.log(res); 

使用ES8 Object.values()从对象中获取所有值,然后应用.filter.map

 let users = { '0LsRDanmw1s1KBvZAAAC': { name: 'user1', room: 'Lobby' }, 'Qvd9v0EStnwNe11mAAAD': { name: 'user2', room: 'Music' }, }; var onlineUsers = Object.values(users).filter(el => el.room==="Lobby").map(el => el.name); console.log(onlineUsers); 

我仍然喜欢老式的,浏览器安全的,简单的for循环的版本,因此出于完整性考虑:

 var users = { '0LsRDanmw1s1KBvZAAAC': { name: 'user1', room: 'Lobby' }, 'Qvd9v0EStnwNe11mAAAD': { name: 'user2', room: 'Music' }, }; var lobbyUsers = []; for (var prop in users) { if (users.hasOwnProperty(prop)) { if (users[prop].room === 'Lobby') { lobbyUsers.push(users[prop].name); } } } console.log(lobbyUsers); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM