[].every

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

Кратко

Секция статьи "Кратко"

Метод массива Array.every позволяет узнать, удовлетворяют ли все элементы в массиве условию в функции-колбэке. Результатом вызова метода Array.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})
          // Проверим, что все пользователи онлайн
const isAllUsersOnline = users.every(user => {
  return user.online
})

        
        
          
        
      

Проверка, что всех пользователей зовут «Анна», вернёт false:

        
          
          const isAllUsersAnna = users.every(user => {  return user.name === 'Анна'})
          const isAllUsersAnna = users.every(user => {
  return user.name === 'Анна'
})

        
        
          
        
      

Интерактивный пример:

Открыть демо в новой вкладке

Как пишется

Секция статьи "Как пишется"

В метод Array.every необходимо передать колбэк-функцию, которая должна возвращать boolean-значение, аналогично методам Array.filter или Array.some. Возвращать можно и другие truthy и falsy значения, они преобразуются согласно типу.

Функция, которую мы передаём в метод Array.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

        
        
          
        
      

Как это понять

Секция статьи "Как это понять"

Метод Array.every позволяет решить задачу, когда необходимо узнать, что все элементы в массиве соответствуют условию. Метод, по сути, противоположен Array.some. В Array.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;
  }
}

        
        
          
        
      

Метод Array.every позволит написать все в одно компактное и понятное выражение.

        
          
          const nums = [10, 303, 16, 20, 21]const areGreater = nums.every(num => num >= 10)  // true
          const nums = [10, 303, 16, 20, 21]

const areGreater = nums.every(num => num >= 10)  // 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 :)')
}