Ramda - allPass returns 为真,即使其中一个条件为假
Ramda - allPass returns true, even if one of the conditions is false
我正在使用 Ramda 来清理我的代码。我需要做一些复杂的检查。我决定使用 ramda 中的 allPass
和 anyPass
而不是 &&
和 ||
。
但是我有一个问题。 AllPass,即使其中一个条件为假,也会 return true
,而常规 && returns 为假。
第一个检查是错误的,第二个是正确的。然而,这种奇怪的事情正在发生。
// Regulr &&, returns false
const emptyView =
R.contains(itemType, [IItemType.ONE, IItemType.TWO]) &&
R.equals(mode, IViewMode.VIEW);
// Ramda allPass returns true
const emptyView = R.allPass([
R.contains(itemType, [IItemType.JSON, IItemType.AVRO]),
R.equals(mode, IViewMode.VIEW),
]);
有人可以向我解释为什么吗?我尝试了 Ramda 的两种变体。一个普通的数组,还调用函数,提供必要的信息,但没有运气。我做错了什么?
虽然第一个 emptyView
实际上是布尔类型,
第二个只是一个函数(在 javascript 中总是求值为真)。
我认为以下是您真正需要的,
一个可以告诉您 itemType
和 mode
是否正确的函数。
const IItemType = {
JSON: 1,
AVRO: 2
};
const IViewMode = {
VIEW: 'view',
};
const fn = R.useWith(R.and, [
R.contains(R.__, [IItemType.JSON, IItemType.AVRO]),
R.equals(IViewMode.VIEW),
]);
console.log(
'it should be true =>',
fn(1, 'view'),
);
console.log(
'it should be false =>',
fn(1, 'something-but-view'),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>
我正在使用 Ramda 来清理我的代码。我需要做一些复杂的检查。我决定使用 ramda 中的 allPass
和 anyPass
而不是 &&
和 ||
。
但是我有一个问题。 AllPass,即使其中一个条件为假,也会 return true
,而常规 && returns 为假。
第一个检查是错误的,第二个是正确的。然而,这种奇怪的事情正在发生。
// Regulr &&, returns false
const emptyView =
R.contains(itemType, [IItemType.ONE, IItemType.TWO]) &&
R.equals(mode, IViewMode.VIEW);
// Ramda allPass returns true
const emptyView = R.allPass([
R.contains(itemType, [IItemType.JSON, IItemType.AVRO]),
R.equals(mode, IViewMode.VIEW),
]);
有人可以向我解释为什么吗?我尝试了 Ramda 的两种变体。一个普通的数组,还调用函数,提供必要的信息,但没有运气。我做错了什么?
虽然第一个 emptyView
实际上是布尔类型,
第二个只是一个函数(在 javascript 中总是求值为真)。
我认为以下是您真正需要的,
一个可以告诉您 itemType
和 mode
是否正确的函数。
const IItemType = {
JSON: 1,
AVRO: 2
};
const IViewMode = {
VIEW: 'view',
};
const fn = R.useWith(R.and, [
R.contains(R.__, [IItemType.JSON, IItemType.AVRO]),
R.equals(IViewMode.VIEW),
]);
console.log(
'it should be true =>',
fn(1, 'view'),
);
console.log(
'it should be false =>',
fn(1, 'something-but-view'),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>