gpt4 book ai didi

javascript - 使用 JavaScript 将变量与嵌套数组内的对象进行匹配

转载 作者:行者123 更新时间:2023-12-02 22:36:13 24 4
gpt4 key购买 nike

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

我不确定我在这里做错了什么:

这个想法是,我有一个包含一组权限的数组,并且我只想返回与 Angular 色匹配的权限集:

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

}

出于某种原因,我找不到匹配项。我只想返回完整的对象,例如:

"admin":{ 
"static": ["posts:list", "posts:create", "posts:edit", "posts:delete", "users:get", "users:getSelf", "home-page:visit", "dashboard-page:visit"]
}

Here is a JS Bin Link.

最佳答案

您可以使用.find函数如下:

data.find(function(x){ return Object.keys(x).indexOf(role) > -1; });

鉴于您的 Angular 色是对象的键,您需要检查对象本身是否包含 Angular 色作为键,为此您可以使用 Object.keys(<object>).indexOf(role)哪里indexOf将返回值 -1如果没有找到并且 0+如果找到的话。

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"

var admins = data.find(function(x){ return Object.keys(x).indexOf(role) > -1; });

console.log(admins);

如果您想适应一系列不同的 Angular 色,您可以使用以下易于理解的示例。

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", "visitor"];

var admins = role.map(function(role) { return getObjectsForRole(role); })


function getObjectsForRole(role)
{

return data.find(function(x){
return Object.keys(x).indexOf(role) > -1;
});

}

console.log(admins);

上面与之前几乎相同,但我们映射( .map )每个 Angular 色并调用一个函数,其中包含对 .find 的调用。功能。

关于javascript - 使用 JavaScript 将变量与嵌套数组内的对象进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58729647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com