比较ramda中的两个丢失和过滤器等于

时间:2017-09-21 09:43:20

标签: javascript regex ramda.js

我有一个名为navLinks的数组,其中包含一个名为requiredPermissions的属性;还有一组名为userPermisssion的权限 现在我希望filter所有navLink项基于requiredPermission道具等于requiredPermission。 我的方法很简单,但是当它列出来时我很困惑。

R.filter(R.equal(R.prop('requiredPermossions',x), ??? ))

编辑: 例如,假设我们有一个名为NavLinks的对象数组,它有一个属性userPermisssion =['FIN']并且有一个列表requiredPermission=['FIN','ADMIN']。现在我们可以说这个用户拥有匹配权限navlinks的权限。两个变量都是表示角色和权限的字符串列表。

1 个答案:

答案 0 :(得分:1)

我想我得到了你需要的东西。管道命令更干净。这是一个做你想做的事的例子:

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. 中的每个对象调用过滤器中使用的函数
  3. 在管道内部,我们只保留requiredPermissions列表
  4. 对于列表中的每个项目,我们检查它是否包含在userPermissions列表中。只有在userPermissions中包含所有权限时,我们才会返回true。