Можно ли получить «обратную» функцию булевой функции в javascript?

#javascript

Вопрос:

Я хотел написать функцию «все или ничего» над массивом. Один из подходов, конечно, состоит в том, чтобы использовать Array.prototype.every и делать что-то вроде

 function allOrNothing(arr, f, fInv) {  return arr.every(f) || arr.every(fInv); }  

где f и fInv являются индикаторными функциями, и fInv является «обратной» функцией f . Например, если f = (x) =gt; x != null , то fInv = (x) =gt; x == null .

Это наводит меня на мысль: можно ли получить функцию fInv от f ?

Комментарии:

1. Не уверен, о чем ты спрашиваешь. Вы просто ищете ! (логическое «нет»)? В fInv = x =gt; !f(x) смысле ?

2. Кажется, что вы хотите свести на нет результат.

3. В вашем тривиальном примере fInv фактически «не f». Для произвольных функций, я полагаю, это зависит от того, какого поведения вы ожидаете. Может нормально работать для чистых функций, которые просто возвращают логическое значение.

4. @MarkReed Да! Я совершенно упустил это из виду. Спасибо

Ответ №1:

Эта функция, учитывая функцию f в качестве входных данных, возвращает ее логическое обратное:

let invert = (f) =gt; (x) =gt; !f(x)

напр.

 let invert = (f) =gt; (x) =gt; !f(x)  let eq_five = (x) =gt; x == 5 let neq_five = invert(eq_five)  console.log(eq_five(5)) // true console.log(neq_five(5)) // false