在 ramda 中比较两个丢失和过滤等于
compare two lost and filter equals in ramda
我有一个名为 navLinks
的数组,其中有一个名为 requiredPermissions
的 属性;还有一个名为 userPermisssion
.
的权限数组
现在我想 filter
所有 navLink
项目基于它们 requiredPermission
道具等于 requiredPermission
.
我的方法很简单,但在列出时我感到困惑。
R.filter(R.equal(R.prop('requiredPermossions',x), ??? ))
编辑:
例如,假设我们有一个名为 NavLinks
的对象数组,它有一个 属性 userPermisssion =['FIN']
和一个列表 requiredPermission=['FIN','ADMIN']
。现在我们可以说这个用户有匹配权限导航链接的权限。两个变量都是表示角色和权限的字符串列表。
我想我得到了你需要的东西。管道命令更干净。这是一个可以满足您要求的示例:
const navLinks = [
{ requiredPermissions: ['FIN'] },
{ requiredPermissions: ['FIN', 'ADMIN'] },
];
const userPermissions = ['FIN'];
const result = R.filter(
R.pipe(
R.prop('requiredPermissions'),
R.all(R.flip(R.contains)(userPermissions)),
), navLinks);
解释是这样的:
- 过滤器中使用的函数随 navLinks 中的每个对象一起调用
- 在管道中,我们只保留 requiredPermissions 列表
- 对于列表中的每个项目,我们检查它是否包含在 userPermissions 列表中。只有当所有权限都包含在 userPermissions 中时,我们才 return true.
我有一个名为 navLinks
的数组,其中有一个名为 requiredPermissions
的 属性;还有一个名为 userPermisssion
.
的权限数组
现在我想 filter
所有 navLink
项目基于它们 requiredPermission
道具等于 requiredPermission
.
我的方法很简单,但在列出时我感到困惑。
R.filter(R.equal(R.prop('requiredPermossions',x), ??? ))
编辑:
例如,假设我们有一个名为 NavLinks
的对象数组,它有一个 属性 userPermisssion =['FIN']
和一个列表 requiredPermission=['FIN','ADMIN']
。现在我们可以说这个用户有匹配权限导航链接的权限。两个变量都是表示角色和权限的字符串列表。
我想我得到了你需要的东西。管道命令更干净。这是一个可以满足您要求的示例:
const navLinks = [
{ requiredPermissions: ['FIN'] },
{ requiredPermissions: ['FIN', 'ADMIN'] },
];
const userPermissions = ['FIN'];
const result = R.filter(
R.pipe(
R.prop('requiredPermissions'),
R.all(R.flip(R.contains)(userPermissions)),
), navLinks);
解释是这样的:
- 过滤器中使用的函数随 navLinks 中的每个对象一起调用
- 在管道中,我们只保留 requiredPermissions 列表
- 对于列表中的每个项目,我们检查它是否包含在 userPermissions 列表中。只有当所有权限都包含在 userPermissions 中时,我们才 return true.