首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Ramda.js组合AND条件拒绝数组项

通过Ramda.js组合AND条件拒绝数组项
EN

Stack Overflow用户
提问于 2019-09-11 16:32:47
回答 2查看 347关注 0票数 1

我想使用Ramda.js库来reject数组项目。

有必要删除项目,它有两个等同于0的道具。有没有可能用普通的Ramda.js函数来实现这个without lambdas

我希望收到具有A, B, C名称的项(除了D,其中accbal都等于0),但我的示例返回A, C

代码语言:javascript
复制
const arr = [
  {
    name: 'A',
    acc: 1,
    bal: 2,
  },
  {
    name: 'B',
    acc: 3,
    bal: 0,
  },
  {
    name: 'C',
    acc: 0,
    bal: 4,
  },
  {
    name: 'D',
    acc: 0,
    bal: 0,
  }
]

const filteredItems = R.reject(
  R.and(
    R.propEq('acc', 0),
    R.propEq('bal', 0)
  )
)(arr)

这是Ramda REPL to test my example

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-11 17:02:51

在Ramda库中,R.and方法返回一个布尔值,而R.reject方法则希望使用一个迭代值来遍历提供的数组。您可以使用R.allPass方法来实现这一点。此方法接受谓词(如R.propEq)的数组,并返回一个使用" and“逻辑将它们组合在一起的谓词。

代码语言:javascript
复制
R.reject(
    R.allPass([
        R.propEq('acc', 0),
        R.propEq('bal', 0)
    ])
)(arr);

注意:如果你想使用"OR“逻辑,你可以使用R.anyPass

票数 2
EN

Stack Overflow用户

发布于 2019-09-11 17:08:59

R.propEq中使用R.allPass/R.both的另一种方法是R.where,它接受一个“规范对象”,如果满足所有属性,则返回true。

代码语言:javascript
复制
R.reject(R.where({
  acc: R.equals(0),
  bal: R.equals(0)
}))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57885184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档