почему every на пустом массиве возвращает true? [дубликат]

195
28 декабря 2018, 14:40

На данный вопрос уже ответили:

  • Метод `All()` для пустой коллекции возвращает `true`: баг или фича? 1 ответ

почему [].every(el => el.selected) возвращает true?

Answer 1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

Note: This method returns true for any condition put on an empty array.

Замечание: Этот метод возвращает true для любого условия, примененного к пустому массиву.

Answer 2

Вообще, как правило эту функцию так определяют by convention. В хаскеле, например,

all :: (a -> Bool) -> [a] -> Bool
all p = and . map p
and :: [Bool] -> Bool
and = foldr (&&) True

(True в последней строке — это как раз начальное значение, которое и возвращается для пустого массива.)

Собственно, это позволяет определить функцию рекуррентно. В псевдокоде было бы что-нибудь вроде:

every(arr, pred) = now_and_then(arr, pred, 0) where
    now_and_then(arr, pred, i) =
        i == arr.length ||
        pred(arr[i]) and now_and_then(arr, pred, i + 1)

При выходе за пределы массива в таком случае лучше возвращать True, иначе случай пустого массива пришлось бы разбирать отдельно.

Ну и, собственно, логическое определение: "Для любого элемента массива предикат истинен". В пустом массиве, очевидно, это истинно: отрицание высказывания — "Существует в массиве элемент, такой что значение предиката для этого элемента ложно", — но в пустом массиве нет такого элемента.

READ ALSO
npm jss все стили в одном блоке <style/>

npm jss все стили в одном блоке <style/>

Использую пакет jss для написания стилей в js

211
Как отловить событие мыши?

Как отловить событие мыши?

Надо сделать, чтобы когда мы не находимся на (navigation-link или

231