[英]Is there an alternative for these comparing cases in lodash/ramda?
This is my implementation with examples. 这是我的示例实现。
function comparator(values = [], matchValue, mapFn, reduceFn) {
if (values.length === 0) {
return undefined !== matchValue;
}
return values
.map(mapFn)
.reduce(reduceFn);
}
/**
* const a = 1, b = 2, c = 3;
* a === 1 || b === 1 || c === 1 // true
* isEqualOr([1, 2, 3], 1) // true
*/
export const isEqualOr = (values, matchValue) => comparator(
values,
matchValue,
value => value === matchValue,
(prev, curr) => prev || curr
);
/**
* a === 1 && b === 1 && c === 1 // false
* isEqualAnd([1, 2, 3], 1) // false
*/
export const isEqualAnd = (values, matchValue) => comparator(
values,
matchValue,
value => value === matchValue,
(prev, curr) => prev && curr
);
/**
* a !== 1 || b !== 1 || c !== 1 // true
* isNotEqualOr([1, 2, 3], 1) // true
*/
export const isNotEqualOr = (values, matchValue) => comparator(
values,
matchValue,
value => value !== matchValue,
(prev, curr) => prev || curr
);
/**
* a !== 1 && b !== 1 && c !== 1 // false
* isNotEqualAnd([1, 2, 3], 1) // false
*/
export const isNotEqualAnd = (values, matchValue) => comparator(
values,
matchValue,
value => value !== matchValue,
(prev, curr) => prev && curr
);
In Ramda, I would do it using all
and any
, using complement
for negation: 在Ramda中,我将使用
all
和any
,并使用complement
求反:
const isEqualOr = (values, matchValue) => any(equals(matchValue), values);
isEqualOr([1, 2, 3], 1); //=> true
isEqualOr([1, 2, 3], 5); //=> false
const isEqualAnd = (values, matchValue) => all(equals(matchValue), values);
isEqualAnd([1, 2, 3], 2); //=> false
isEqualAnd([2, 2, 2], 2); //=> true
// const isNotEqualOr = (values, matchValue) => any(complement(equals)(matchValue), values);
// or
const isNotEqualOr = complement(isEqualAnd);
isNotEqualOr([1, 2, 3], 2); //=> true
isNotEqualOr([2, 2, 2], 2); //=> false
// const isNotEqualAnd = (values, matchValue) => all(complement(equals)(matchValue), values);
// or
const isNotEqualAnd = complement(isEqualOr);
isNotEqualAnd([1, 2, 3], 2); //=> false
isNotEqualAnd([1, 2, 3], 5); //=> true
It would be fairly easy to make these point-free, but I don't see any good reason to do so. 使这些无点数相当容易,但是我看不出有什么充分的理由这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.