我具有过滤功能,并向其中传递了测试功能:
var array = [1,3,5,7,9]
function bigger(n){return n > 5}
function filterArray(data,testfn){
return data.filter(e=> testfn(e))}
console.log(filterArray(array,bigger))
>>>[7,9]
现在的ID喜欢写东西
console.log(filterArray(array,not(bigger)))
>>>[1,3,5]
答案 0 :(得分:4)
您可以创建一个函数not
,该函数接受一个函数并返回另一个函数,该函数返回调用原始函数的结果的反函数:
var array = [1, 3, 5, 7, 9];
function bigger(n) {
return n > 5
}
function filterArray(data, testfn) {
return data.filter(e => testfn(e))
}
function not(f) {
return function(n) {
return !f(n);
}
}
console.log(filterArray(array, bigger));
console.log(filterArray(array, not(bigger)));
答案 1 :(得分:1)
您可以执行以下操作:
var array = [1, 3, 5, 7, 9]
const isBiggerThan = (n) => n > 5
const isNot = (fn) => (n) => !fn(n)
const filterArray = (data, testfn) => data.filter(e => testfn(e))
console.log(filterArray(array, isBiggerThan))
console.log(filterArray(array, isNot(isBiggerThan)))
想法是让isNot
函数返回一个函数,该函数简单地否定作为参数函数传递的结果。
答案 2 :(得分:0)
我会做类似以下的事情。
var array = [1,3,5,7,9]
function bigger(n){return n > 5}
console.log(array.filter(element => !bigger(element)))
答案 3 :(得分:0)
要说明可变函数: 在数组“参数”中收集参数,并将其传递给函数。
function not(myFunction){
if (typeof myFunction != "function"){return !myFunction }
return function (...arguments) {
return !myFunction.apply(null,arguments)
}
}
简而言之:
const not = f => (...a) => !f.apply(null,a)
还要使它适用于所有值-检查是否已传递函数。也可以像not(bigger(1,2))
这样使用它:
function not(anything){
if (typeof anything != "function"){return !anything }
return function (...arguments) {
return !anything.apply(null,arguments)
}
}
var variable = true
console.log(not(bigger(6))) >>> true
console.log(not(variable))) >>> false
console.log(not(false))) >>> true
简而言之:
const not = f => typeof f != "function" ? !f : (...a) => !f.apply(null,a)