.every()

Проверить по списку, что все сделали домашнее задание? Проще простого с массивами и методом every.

Время чтения: меньше 5 мин

Кратко

Скопировано

Метод массива .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 = true;for (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.every – это 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 :)')
}