在 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);

解释是这样的:

  1. 过滤器中使用的函数随 navLinks 中的每个对象一起调用
  2. 在管道中,我们只保留 requiredPermissions 列表
  3. 对于列表中的每个项目,我们检查它是否包含在 userPermissions 列表中。只有当所有权限都包含在 userPermissions 中时,我们才 return true.