Не понимаю применение оператора?
function every(array, predicate) {
for (let element of array) {
if (!predicate(element)) return false;
} return true;
}
console.log(every([1, 3, 5], n => n < 10));
console.log(every([2, 4, 16], n => n < 10));
console.log(every([], n => n < 10));
Не могу понять, если убрать оператор ! перед predicate, то средний вывод в консоль все равно будет false. Подскажите почему?
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
Потому что Законы де Моргана.
Исходный код:
код | описание |
---|---|
for (let element of array) | в массиве |
return false | не |
if (...(element)) | существует элемент, |
!predicate(element) | который не соответствует условию |
твой вариант
код | описание |
---|---|
for (let element of array) | в массиве |
return false | не |
if (...(element)) | существует элемент, |
predicate(element) | который соответствует условию |
что, очевидно, не является противоположным условием.
Автор решения: CrazyElf
→ Ссылка
Потому что это будет тоже самое, что, не меняя код функции, поменять условие предиката на противоположное.
Т.е. вместо:
console.log(every([2, 4, 16], n => n < 10));
Будет:
console.log(every([2, 4, 16], n => n >= 10));
Оба условия n < 10
и n >= 10
верны не для всех элементов массива, отсюда и false
.