gpt4 book ai didi

javascript - 如何根据条件过滤数组

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:48 24 4
gpt4 key购买 nike

我正在处理基于 Angular 色的权限,我有以下数组,

let Roles = {
[
{ model: 'user', property: 'find', permission: 'allow' },
{ model: 'user', property: 'create', permission: 'allow' },
{ model: 'user', property: 'update', permission: 'deny' },
{ model: 'user', property: 'delete', permission: 'deny' }
],
[
{ model: 'registration', property: 'find', permission: 'allow' },
{ model: 'registration', property: 'create', permission: 'deny' },
{ model: 'registration', property: 'update', permission: 'deny' },
{ model: 'registration', property: 'delete', permission: 'deny' }
]
[
{ model: 'schedule', property: 'find', permission: 'allow' },
{ model: 'schedule', property: 'create', permission: 'allow' },
{ model: 'schedule', property: 'update', permission: 'allow' }
{ model: 'schedule', property: 'delete', permission: 'deny' }
]
}

我正在尝试获得以下输出

  let userPermissions = [{
'menu_name': 'user',
'canFetchData': true,
'canCreateData': true,
'canUpdateData': false,
'canDeleteData': false,
}]

let registrationPermissions = [{
'menu_name': 'registration',
'canFetchData': true,
'canCreateData': false,
'canUpdateData': false,
'canDeleteData': false,
}]

let schedulePermissions = [{
'menu_name': 'schedule',
'canFetchData': true,
'canCreateData': true,
'canUpdateData': true,
'canDeleteData': false,
}]

生成结果的条件是,对于给定的模型和属性,如果许可允许,则它应该为真,否则为假。

我已经尝试编写 if condition 并在 if condition matches 时分配值 true 。但是对于第二个数组,值是最重要的

从 Roles 数组,我将每个数组传递给以下函数并返回结果

  private canFetchData;
private canCreateData;
private canUpdateData;
private canDeleteData;

filterAndApplyPermission(data) {
for (let i = 0; i < data.length; i++) {
if (data[i].property === 'find' && data[i].permission === 'ALLOW') {
this.canFetchData = true;
} else if (data[i].property === 'create' && data[i].permission === 'ALLOW') {
this.canCreateData = true;
} else if (data[i].property === 'update' && data[i].permission === 'ALLOW') {
this.canUpdateData = true;
} else if (data[i].property === 'delete' && data[i].permission === 'ALLOW') {
this.canDeleteData = true;
}
}

const grouped_permission = {
'menu': data[0].model,
'canFetchData': this.canFetchData,
'canCreateData': this.canCreateData,
'canUpdateData': this.canUpdateData,
'canDeleteData': this.canDeleteData,
};
return grouped_permission;
}

最佳答案

您可以使用过滤器来查找特定用户的权限数组:

roleInfo
.filter(roles=>roles[0].model==="schedule")[0]

使用 reduce 创建对象并 switch对于每个属性。

rolesForUser
.reduce(
(info,item)=>{
switch(item.property) {
case 'find':
info.canFetchData = (item.permission==='allow')?true:false
break;
//other cases
}
return info;
},
{menu_name : user}//initial info object with menu_name set to user
);

const roleInfo = [
[
{ model: 'user', property: 'find', permission: 'allow' },
{ model: 'user', property: 'create', permission: 'allow' },
{ model: 'user', property: 'update', permission: 'deny' },
{ model: 'user', property: 'delete', permission: 'deny' }
],
[
{ model: 'registration', property: 'find', permission: 'allow' },
{ model: 'registration', property: 'create', permission: 'deny' },
{ model: 'registration', property: 'update', permission: 'deny' },
{ model: 'registration', property: 'delete', permission: 'deny' }
],
[
{ model: 'schedule', property: 'find', permission: 'allow' },
{ model: 'schedule', property: 'create', permission: 'allow' },
{ model: 'schedule', property: 'update', permission: 'allow' },
{ model: 'schedule', property: 'delete', permission: 'deny' }
]
];

const getRoleForUser = (user,roleInfo) =>
roleInfo
.filter(roles=>roles[0].model===user)[0]
.reduce(
(info,item)=>{
switch (item.property) {
case 'find':
info.canFetchData = (item.permission==='allow')?true:false
break;
case 'create':
info.canCreateData = (item.permission==='allow')?true:false
break;
case 'update':
info.canUpdateData = (item.permission==='allow')?true:false
break;
case 'delete':
info.canDeleteData = (item.permission==='allow')?true:false
break;
default:
throw new Error(`${item.property} is an unknown permission`);
}
return info;
},
{menu_name : user}
);

console.log(getRoleForUser("registration",roleInfo));

关于javascript - 如何根据条件过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50000026/

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