Кратко
СкопированоМетод массива .every
позволяет узнать, удовлетворяют ли все элементы в массиве условию в функции-колбэке. Результатом вызова метода .every
будет boolean-значение true
или false
. Если хотя бы один элемент не будет удовлетворять условию, то результат будет false
.
Пример
СкопированоДанные представляют собой информации о пользователях с именем и флагом, онлайн ли сейчас пользователь:
const users = [ { name: 'Анна', online: true }, { name: 'Михаил', online: true }, { name: 'Саша', online: true },]
const users = [ { name: 'Анна', online: true }, { name: 'Михаил', online: true }, { name: 'Саша', online: true }, ]
Проверка, что все пользователи сейчас онлайн, вернёт true
:
const isAllUsersOnline = users.every(user => { return user.online})console.log(isAllUsersOnline)// true
const isAllUsersOnline = users.every(user => { return user.online }) console.log(isAllUsersOnline) // true
Проверка, что всех пользователей зовут «Анна», вернёт false
:
const isAllUsersAnna = users.every(user => { return user.name === 'Анна'})console.log(isAllUsersAnna);// false
const isAllUsersAnna = users.every(user => { return user.name === 'Анна' }) console.log(isAllUsersAnna); // false
Интерактивный пример:
Как пишется
СкопированоВ метод .every
необходимо передать колбэк-функцию, которая должна возвращать boolean-значение, аналогично методам Array.filter или Array.some. Возвращать можно и другие truthy и falsy значения, они преобразуются согласно типу.
Функция, которую мы передаём в метод .every
, может принимать три параметра:
item
— элемент массива в текущей итерации;index
— индекс текущего элемента;arr
— сам массив, который мы перебираем.
const balls = ['🎾', '🎾', '🎾', '🎾']const areAllBallsAreGreen = balls.every( (ball, index, arr) => ball === '🎾')// true
const balls = ['🎾', '🎾', '🎾', '🎾'] const areAllBallsAreGreen = balls.every( (ball, index, arr) => ball === '🎾' ) // true
Как понять
СкопированоМетод .every
позволяет решить задачу, когда необходимо узнать, что все элементы в массиве соответствуют условию. Метод, по сути, противоположен .some(). В .every
, чтобы результат выражения стал true
, необходимо, чтобы все элементы удовлетворяли условию функции-предиката.
Для сравнения напишем пример через for
или while
:
const nums = [10, 303, 16, 20, 21]let areGreater = truefor (let i = 0; i < nums.length; i++) { if (nums[i] < 10) { areGreater = false break }}
const nums = [10, 303, 16, 20, 21] let areGreater = true for (let i = 0; i < nums.length; i++) { if (nums[i] < 10) { areGreater = false break } }
Метод .every
позволит написать все в одно компактное и понятное выражение.
const nums = [10, 303, 16, 20, 21]const areGreater = nums.every(num => num >= 10)console.log(areGreater)// true
const nums = [10, 303, 16, 20, 21] const areGreater = nums.every(num => num >= 10) console.log(areGreater) // true
На практике
Скопированосоветует Скопировано
🛠 Из-за того, что результат выполнения метода Array
– это boolean-значение, метод можно удобно использовать прямо в условных конструкциях:
const drinks = ['🍺', '🍺', '🍺', '🍺', '🍺']if (drinks.every(drink => drink === '🍺')) { console.log('This is a beer party! 🎉')}
const drinks = ['🍺', '🍺', '🍺', '🍺', '🍺'] if (drinks.every(drink => drink === '🍺')) { console.log('This is a beer party! 🎉') }
Но следует помнить, что проверка пустого массива всегда вернёт true
const drinks = []if (drinks.every(drink => drink === '🍺')) { console.log('This is a beer party! 🎉 without BEER :)')}
const drinks = [] if (drinks.every(drink => drink === '🍺')) { console.log('This is a beer party! 🎉 without BEER :)') }