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>
我正在尝试使用 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>