JavaScript 如何否定谓词函数
在本文章中,我们将看到如何在JavaScript中否定谓词函数。谓词函数是根据条件检查并根据参数返回true和false的函数。我们的任务是获取谓词函数的相反结果。
我们按照以下方法来获得所需结果。
方法1
我们的谓词函数正在检查奇数和偶数。如果数字与2取模后返回1,则为奇数;否则为偶数。在检查参数的条件时,否定逻辑。
示例: 此示例展示了上述方法。
<script>
// Predicate function check odd
function isOdd(number) {
return number % 2 == 1;
}
// negation of isOdd function
function isNotOdd(number) {
return number % 2 !== 1;
}
// Predicate function check Even
function isEven(number) {
return number % 2 == 0;
}
// negation of isEven function
function isNotEven(number) {
return number % 2 !== 0;
}
// Outputs: true
console.log(isOdd(5));
// Outputs: true
console.log(isNotOdd(2));
// Output: false
console.log(isEven(3));
// Output> false
console.log(isNotEven(4));
</script>
输出:
true
true
false
false
方法2
上述方法的问题是我们在每个否定中硬编码了我们的逻辑。我们可能在否定条件中犯更多的错误。更有效的方法是通过检查条件来否定谓词函数。
示例: 此示例显示了上述解释的方法。
<script>
// Predicate function check odd
function isOdd(number) {
return number % 2 == 1;
}
// negation of isOdd function
function isNotOdd(number) {
return !isOdd(number);
}
// Predicate function check Even
function isEven(number) {
return number % 2 == 0;
}
// negation of isEven function
function isNotEven(number) {
return !isEven(number);
}
// Outputs: true
console.log(isOdd(5));
// Outputs: true
console.log(isNotOdd(10));
// Output: false
console.log(isEven(3));
// Output> false
console.log(isNotEven(4));
</script>
输出:
true
true
false
false
方法3
在前面的方法中,我们对所有的谓词函数都取反。但是,如果我们创建一个函数来取反所有的谓词函数,我们的解决方案可能更有效。我们创建一个谓词函数,并将取反函数与所有的谓词函数绑定。
示例: 这个示例展示了上述解决方案的应用。
<script>
// Predicate function check odd
function isOdd(number) {
return number % 2 == 1;
}
// Predicate function check Even
function isEven(number) {
return number % 2 == 0;
}
// function that negate all function
function negate(pre) {
return function (number) {
return !pre(number);
};
}
// Wrapping predicate function to negate function
var isNotOdd = negate(isOdd);
var isNotEven = negate(isEven);
// Outputs: true
console.log(isOdd(5));
// Outputs: true
console.log(isNotOdd(10));
// Output: false
console.log(isEven(3));
// Output: false
console.log(isNotEven(4));
</script>
输出:
true
true
false
false