我有一组具有权限数组的用户.我想过滤掉拥有运算符权限的用户.
用户列表
[
{
EmailAddress: "[email protected]",
FullName: "Test User",
Permissions: [
{
PermissionData: null,
PermissionID: 202,
PermissionName: "operator",
roleName: "operator",
roleid: 8,
}
],
UserID: 105,
},
{
EmailAddress: "[email protected]",
FullName: "tested User",
Permissions: [
{
PermissionData: null,
PermissionID: 205,
PermissionName: "admin",
roleName: "Admin",
roleid: 5,
}
],
UserID: 101,
},
]
我试过这个,但它并没有让所有拥有运算符权限的用户
data.filter(x => {
for (const permission of x.Permissions) {
return permission['PermissionName'] === 'boc-operator';
}
});
解决方法:
您可以执行以下操作:
const data = [
{
EmailAddress: '[email protected]',
FullName: 'Test User',
Permissions: [
{
PermissionData: null,
PermissionID: 202,
PermissionName: 'operator',
roleName: 'operator',
roleid: 8,
},
],
UserID: 105,
},
{
EmailAddress: '[email protected]',
FullName: 'tested User',
Permissions: [
{
PermissionData: null,
PermissionID: 205,
PermissionName: 'admin',
roleName: 'Admin',
roleid: 5,
},
],
UserID: 101,
},
];
const hasPermission = (permissionName) => (item) =>
item.Permissions.some(
(permission) =>
permission.PermissionName === permissionName,
);
console.log(data.filter(hasPermission('admin')))
如果要对多个字段进行过滤,可以轻松扩展:
const data = [
{
EmailAddress: '[email protected]',
FullName: 'Test User',
Permissions: [
{
PermissionData: null,
PermissionID: 202,
PermissionName: 'operator',
roleName: 'operator',
roleid: 8,
},
],
UserID: 105,
},
{
EmailAddress: '[email protected]',
FullName: 'tested User',
Permissions: [
{
PermissionData: null,
PermissionID: 205,
PermissionName: 'admin',
roleName: 'Admin',
roleid: 5,
},
],
UserID: 101,
},
];
const hasPermission = (permissionName) => (item) =>
item.Permissions.some(
(permission) =>
permission.PermissionName === permissionName,
);
const emailContains = (value) => (item) =>
item.EmailAddress.includes(value);
const createFilter = (...filterFunctions) => (item) =>
filterFunctions.reduce(
(result, fn) => result && fn(item),
true,
);
console.log(
data.filter(
createFilter(
hasPermission('admin'),
emailContains('tested'),
),
)
);
最后;从对象获取属性的示例是在它自己的函数中.现在你有的功能只能实现一件事,并且可以在很多方面重复使用:
const data = [
{
EmailAddress: '[email protected]',
FullName: 'Test User',
Permissions: [
{
PermissionData: null,
PermissionID: 202,
PermissionName: 'operator',
roleName: 'operator',
roleid: 8,
},
],
UserID: 105,
},
{
EmailAddress: '[email protected]',
FullName: 'tested User',
Permissions: [
{
PermissionData: null,
PermissionID: 205,
PermissionName: 'admin',
roleName: 'Admin',
roleid: 5,
},
],
UserID: 101,
},
];
const getPermissions = (item) => item.Permissions;
const getPermissionName = (item) => item.PermissionName;
const getEmailAddress = (item) => item.EmailAddress;
const isIn = (comparer, getter) => (value) => (item) =>
getter(item).some(comparer(value));
const isSame = (getter) => (value) => (item) =>
getter(item) === value;
const contains = (getter) => (value) => (item) =>
getter(item).includes(value);
const hasPermission = isIn(
isSame(getPermissionName),
getPermissions,
);
const emailContains = contains(getEmailAddress);
const createFilter = (...filterFunctions) => (item) =>
filterFunctions.reduce(
(result, fn) => result && fn(item),
true,
);
console.log(
data.filter(
createFilter(
hasPermission('admin'),
emailContains('tested'),
),
),
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。