我在做ramda.js时正在学习。好吧,有很多方法可以达到ramda的目标,但有一些我不明白的事情。
我想检查输入是否匹配一个正则表达式的字符串数组。我以为我可以这样做R.all(R.both(isString, isRegExp))
,但是当输入是一个数字时,它似乎会传递true
。
正如预期的那样,R.allPass([isString, isRegExp])
会为false
提供一个数字输入。
但有人可以解释一下为什么R.all会回归真实吗?或者错误(在思考中)是什么和哪里?
完整代码:
var isString = R.is(String),
isMyRegExp = R.test(/^[a-z]+$/),
isMyRegExpString = R.both(isString, isMyRegExp),
isArrayOfMyRegExpStrings = R.all(isMyRegExpString),
isArrayOfMyRegExpStringsPass = R.allPass([isString, isMyRegExp]),
result = {
'all': isArrayOfMyRegExpStrings(9),
'allPass': isArrayOfMyRegExpStringsPass(9)
};
console.log(result);
// {
// all: true,
// allPass: false
// }
https://codepen.io/Eisenhardt/pen/PKLZqj
PS: 我知道我可以用正则表达式来缩短条件,但是在其他情况下我需要两个条件都是真的。例如。 isArrayOfNumber和sumOfNumbersOver50。