javascript - 如何按角色数组过滤对象?
问题描述
我有一个包含一些对象的数组:
const array = [
{
id: 1,
username: "username1",
roles: [
{
id: 1,
name: "ROLE_USER"
},
{
id: 8,
name: "ROLE_ADMIN"
}
]
},
{
id: 2,
username: "username2",
roles: [
{
id: 1,
name: "ROLE_USER"
},
{
id: 10,
name: "ROLE_TESTER"
}
]
},
{
id: 3,
username: "username3",
roles: [
{
id: 1,
name: "ROLE_USER"
},
{
id: 8,
name: "ROLE_ADMIN"
}
]
}
]
现在,如何按角色过滤这些对象?我只想让用户使用“ROLE_ADMIN”。我尝试做类似的事情:
const admins = array.filter(user => user.roles.filter(role => role.name === "ROLE_ADMIN"));
和
const admins = array.filter(user => user.roles.map(role => role.name === "ROLE_ADMIN"));
和
const admins = array.map(user => user.roles.filter(role => role.name === "ROLE_ADMIN"));
但这些都不起作用。有人能帮我吗?
解决方案
尝试filter
结合some
根据MDN 文档:
该
some()
方法测试数组中的至少一个元素是否通过了提供的函数实现的测试。它返回一个布尔值。
下面的片段可以帮助你
const data = [
{
id: 1,
username: 'username1',
roles: [
{
id: 1,
name: 'ROLE_USER'
},
{
id: 8,
name: 'ROLE_ADMIN'
}
]
},
{
id: 2,
username: 'username2',
roles: [
{
id: 1,
name: 'ROLE_USER'
},
{
id: 10,
name: 'ROLE_TESTER'
}
]
},
{
id: 3,
username: 'username3',
roles: [
{
id: 1,
name: 'ROLE_USER'
},
{
id: 8,
name: 'ROLE_ADMIN'
}
]
}
]
const res = data.filter(user =>
user.roles.some(role => role.name === 'ROLE_ADMIN')
)
console.log(res)
推荐阅读
- python-3.x - 无法使用 Selenium/Splinter 保存和重新加载 Gmail Cookie
- html - 如何在本地环境中使用 amp-list 开发 AMP?
- reactjs - 如何在 ReactJS 中集成 Zoho
- html - 搜索框字段和搜索按钮不在特定宽度上显示内联块
- python - python 3如何在内部处理大整数
- oracle - Oracle SELECT 子查询
- powershell - 如何在不解析的情况下从 powershell 命令行获取 -vf 到 ffmpeg
- ionic-framework - 如何设置吐司的样式
- php - Codeigniter 路线不显示任何内容
- c++ - 是否有编译器警告是 Visual Studio 2013 来检测复制而不是通过引用分配的引用