От автора: зачастую в JavaScript требуется просеять массив и определить, есть ли в нем элементы, удовлетворяющие определенным условиям, значения в заданном промежутке или же узнать, совпадают ли все ячейки массива с чем-либо. С одной стороны, можно пойти обычным путем и прогнать массив в цикле, проверяя каждое значение (цикл for), ну или использовать более современный метод forEach. Однако есть способ намного лучше: методы every и some, с помощью которых можно получать мгновенный ответ на поставленные условия.
Метод every
К примеру, у нас есть массив возраста:
1 |
var ages = [ 21, 18, 32, 45, 56 ]; |
Нужно проверить все ли ячейки достигли «совершеннолетия» (18 лет или старше), тогда в консоли можно написать следующий код с помощью стрелок:
1 2 |
ages.every(age => age >= 18) > true |
Результат будет или true или false, т.е. строку выше можно было бы записать через условие if:
1 2 3 |
if (ages.every(age => age >= 18)) { // преобразования } |
В методе every есть колбэк, а значит, сравнения можно проводить и во внешних функциях. К примеру, у нас есть JSON массив насекомых:
1 2 3 4 5 6 |
var insects = [ { name: "Monarch", order: "Lepidoptera" }, { name: "Chinese silkworm moth", order: "Lepidoptera" }, { name: "Common Buckeye", order: "Lepidoptera" }, { name: "Hummingbird Hawk-moth", order: "Lepidoptera" } ]; |
Необходимо убедиться, что все насекомые в структуре относятся к группе чешуекрылых (Lepidoptera, семейство мотыльков и бабочек). Можно написать функцию:
1 2 3 |
function isButterflyOrMoth(element) { return (element.order === "Lepidoptera"); } |
Прикрепляем функцию к массиву и показываем результат через консоль:
1 |
console.log(insects.every(isButterflyOrMoth)); |
В нашем случае вернется true.
Метод some
Точно так же можно проверить, что хотя бы часть элементов (some) массива удовлетворяет заданному условию. Скажем, нам нужно определить, что хотя бы одно значение меньше 30. Массив остался тот же:
1 |
var ages = [ 21, 18, 32, 45, 56 ]; |
Стоит отметить, что ни метод all ни метод some не изменяют массив; они только проверяют его на совпадение условию. Нам нужно узнать, если ли хотя бы одно значение, меньшее 30:
1 2 |
ages.some(age => age < 30) > true |
Метод some прекращает работу при нахождении первого совпадения в массиве. Точно так же его можно использовать для поиска в массиве заданного значения. В заданном массиве содержатся греческие музы:
1 2 |
var muses = ["Calliope", "Clio", "Euterpe", "Thalia", "Melpomene", "Terpsichore", "Erato", "Polyhymnia", "Urania"]; |
Проверить массив на заданное значение можно с помощью функции:
1 2 3 |
function isPresent(array, val) { return array.some(arrVal => val === arrVal); } |
Мы можем проверять массив на заданное значение при помощи функции isPresent, передавая в качестве аргументов ей массив и значение для поиска:
1 2 |
isPresent(muses, "Calliope"); > true |
Поддержка
Оба метода превосходно поддерживаются браузерами: все современные браузеры, включая IE9+. (Для IE8 есть полифил).
Источник: //thenewcode.com/
Редакция: Команда webformyself.