RAMDA - 对 'switch purposes' 使用 cond(),exec 也是虚假语句

RAMDA - using cond() for 'switch purposes', exec also falsy statement

我正在尝试使用 cond() 而不是 switch,这是我的设置方式

const {forEachObjIndexed, equals, cond} = R;

const query = {
  hardSkills : ['119928392'],
  softSkills : null,
  country: null,
  status: null,
  freeQuery: null
}

forEachObjIndexed((value, key) => {
  if(value) {
    console.log('before cond', key)
    cond([
      [equals('hardSkills', key), console.log('in hardSkills')],
      [equals('softSkills', key), console.log('in softSkills')]
    ])
  }
}, query)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js"></script>

产出

before cond hardSkills
in hardSkills
in softSkills

根据我的理解,'in softSkills'不应该显示,因为第二个equals语句return false。但是 Ramda 看起来不太合适。

有什么想法吗?

在此先感谢大家

每个 cond 条目中的第二项应该是一个函数。

将控制台日志放在那里将始终立即执行。

除此之外,条件本身也应该是应用于传递给 cond 返回函数的参数的函数。

https://ramdajs.com/docs/#cond

const query = {
  hardSkills : ['119928392'],
  softSkills : null,
  country: null,
  status: null,
  freeQuery: null
}

R.forEachObjIndexed((value, key) => {
  if(value) {
    console.log('before cond', key)
    R.cond([
      [R.equals('hardSkills'), () => console.log('in hardSkills')],
      [R.equals('softSkills'), () => console.log('in softSkills')]
    ])(key)
  }
}, query)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>