首页 > 解决方案 > Ramda 拒绝 - 有没有更优雅的方式来写这个?

问题描述

const people = [
  {
    name: 'bill',
    age: 52
  },
  {
    name: 'james',
    age: 27
  },
  {
    name: 'james',
    age: 17
  }
]

const newPeople = R.reject(person => {
  return R.includes('jam', person.name)
})(people)

有没有更优雅的Ramda方式来写这个?我希望返回一个数组,该数组删除所有jam名称中包含字符串的人员对象。

也许像R.reject(R.where(...))什么?

谢谢!

标签: javascriptfunctional-programmingramda.js

解决方案


我认为你在正确的轨道上where

这对我来说很好读:

const jamless = reject (where ({name: includes ('jam')}))

const people = [{name: 'bill', age: 52}, {name: 'james', age: 27}, {name: 'james', age: 17}]

console .log (
  jamless (people)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script> const {reject, where, includes} = R                 </script>

大声朗读关键字,我们可以听到“reject where name includes 'jam'”,这个问题的英文描述还不错。

如果你想参数化它,它可能只是

const disallow = (str) => reject (where ({name: includes(str)}) )
const jamless = disallow ('jam')

(虽然我很确定我们可以制作 的无点版本disallow,但我认为没有理由尝试,因为这已经很容易阅读了。)

另请参阅相关答案,https://stackoverflow.com/a/29256202


推荐阅读