使用JavaScript将变量与嵌套数组中的对象匹配
我试图在这个JSON数组中找到匹配项,但我发现它有点复杂,因为它是一个嵌套的对象数组 我不确定我到底做错了什么: 我的想法是,我有一个具有一组权限的数组,我只想返回与角色匹配的权限集:使用JavaScript将变量与嵌套数组中的对象匹配,javascript,arrays,Javascript,Arrays,我试图在这个JSON数组中找到匹配项,但我发现它有点复杂,因为它是一个嵌套的对象数组 我不确定我到底做错了什么: 我的想法是,我有一个具有一组权限的数组,我只想返回与角色匹配的权限集: var data = [{ "visitor": { "static": ["page-one:visit", "home-page:visit", "login"] } }, { "users": { "static": ["posts:list", "p
var data = [{
"visitor": {
"static": ["page-one:visit", "home-page:visit", "login"]
}
}, {
"users": {
"static": ["posts:list", "posts:create", "users:getSelf", "home-page:visit", "dashboard-page:visit"]
}
}, {
"admin": {
"static": ["posts:list", "posts:create", "posts:edit", "posts:delete", "users:get", "users:getSelf", "home-page:visit", "dashboard-page:visit"]
}
}]
var role = "admin"
for(var x=0;x <data.length;x++){
if(role === data[x]){
console.log("OLE, we got a match!" + data[x])
}
}
您可以使用
.find
功能,如下所示:
data.find(函数(x){returnobject.keys(x).indexOf(角色)>-1;})代码>
鉴于您的角色是对象的键,您需要检查对象本身是否包含作为键的角色,为此,您可以使用object.keys().indexOf(role)
,其中indexOf
将返回-1
的值,如果未找到,则返回0+
var data=[{“访问者”:{“静态”:[“第一页:访问”,“主页:访问”,“登录”]},{“用户”:{“静态”:[“帖子:列表”,“帖子:创建”,“用户:getSelf”,“主页:访问”,“仪表板页面:访问”]},{“管理员”:{“静态”:[“帖子:列表”,“帖子:创建”,“帖子:编辑”,“帖子:删除”,“用户:获取”,“用户:getSelf”,“主页:访问”,“仪表板页面:访问”}]
var role=“admin”
var admin=data.find(函数(x){return Object.keys(x).indexOf(role)>-1;});
console.log(管理员)
如果将变量角色设置为数组,解决方案是否有效?类似这样的var角色=[“管理员”、“访问者”]
?那么我会同时返回这两组权限吗?不。这不是你的问题,为什么我会跳出框框来考虑虚构的需求我只是笼统地问。感谢您提供的解决方案和解释。我只是好奇它如何能与两个角色一起工作。@someone with akeyboard提问是可以的,但是把它们放在你的主要问题中,而不是评论中。看我的编辑:)事实上,现在我想起来了,有几个结果都没有意义。别理它。
"admin":{
"static": ["posts:list", "posts:create", "posts:edit", "posts:delete", "users:get", "users:getSelf", "home-page:visit", "dashboard-page:visit"]
}