#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