使用JavaScript将变量与嵌套数组中的对象匹配

使用JavaScript将变量与嵌套数组中的对象匹配,javascript,arrays,Javascript,Arrays,我试图在这个JSON数组中找到匹配项,但我发现它有点复杂,因为它是一个嵌套的对象数组 我不确定我到底做错了什么: 我的想法是,我有一个具有一组权限的数组,我只想返回与角色匹配的权限集: var data = [{ "visitor": { "static": ["page-one:visit", "home-page:visit", "login"] } }, { "users": { "static": ["posts:list", "p

我试图在这个JSON数组中找到匹配项,但我发现它有点复杂,因为它是一个嵌套的对象数组

我不确定我到底做错了什么:

我的想法是,我有一个具有一组权限的数组,我只想返回与角色匹配的权限集:

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"]
    }