[英]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.values
, filter
和map
组合:
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.