Клавиша / esc

.some()

Проверит, есть ли в массиве хоть один элемент, подходящий под условие.

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

Кратко

Скопировано

Метод массива some() позволяет узнать, есть ли в массиве хотя бы один элемент, удовлетворяющий условию в функции-колбэке. Колбэк-функция будет вызываться для каждого элемента массива до тех пор, пока не вернётся true, либо пока не закончатся элементы массива.

Результатом вызова метода some() будет boolean-значение true или false. Если ни один элемент в массиве не удовлетворит условию, то результат будет false.

Пример

Скопировано

Проверим, есть ли в массиве есть хотя бы одно чётное число:

        
          
          const nums = [3, 5, 7, 8, 9, 11]const hasEvenNumber = nums.some(num => {  return num % 2 === 0})console.log(hasEvenNumber)// trueconst oddNums = [3, 5, 7, 9, 11]const noEvenNumber = oddNums.some(num => {  return num % 2 === 0})console.log(noEvenNumber)// false
          const nums = [3, 5, 7, 8, 9, 11]
const hasEvenNumber = nums.some(num => {
  return num % 2 === 0
})
console.log(hasEvenNumber)
// true

const oddNums = [3, 5, 7, 9, 11]
const noEvenNumber = oddNums.some(num => {
  return num % 2 === 0
})
console.log(noEvenNumber)
// false

        
        
          
        
      

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

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

Как пишется

Скопировано

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

Функция, которую мы передаём в метод some(), может принимать три параметра:

  • item — элемент массива в текущей итерации;
  • index — индекс текущего элемента;
  • arr — сам массив, который мы перебираем.
        
          
          const balls = ['🎾', '🏈', '🎾', '🎾']const areAllBallsGreen = balls.some(  (ball, index, arr) => ball === '🏈')console.log(areAllBallsGreen)// true
          const balls = ['🎾', '🏈', '🎾', '🎾']

const areAllBallsGreen = balls.some(
  (ball, index, arr) => ball === '🏈'
)
console.log(areAllBallsGreen)
// true

        
        
          
        
      

Как понять

Скопировано

Метод some() позволяет упростить написание кода в случае, когда мы хотим проверить наличие определённого элемента в массиве. В отличие от every(), чтобы результат выражения стал true, достаточно, чтобы хотя бы один элемент удовлетворил условию функции-предиката.

Для сравнения напишем пример через for или while:

        
          
          const food = [  '🍗', '🍖', '🥓', '🥬', '🥩', '🍔']let hasAnySalad = falsefor (let i = 0; i < food.length; i++) {  if (food[i] === '🥬') {    hasAnySalad = true    break  }}console.log(hasAnySalad);// true
          const food = [
  '🍗', '🍖', '🥓', '🥬', '🥩', '🍔'
]

let hasAnySalad = false

for (let i = 0; i < food.length; i++) {
  if (food[i] === '🥬') {
    hasAnySalad = true
    break
  }
}
console.log(hasAnySalad);
// true

        
        
          
        
      

Метод some() позволит написать меньше кода и сделать его понятнее:

        
          
          const food = [  '🍗', '🍖', '🥓', '🥬', '🥩', '🍔']const hasAnySalad = food.some(item => item === '🥬')console.log(hasAnySalad)// true
          const food = [
  '🍗', '🍖', '🥓', '🥬', '🥩', '🍔'
]

const hasAnySalad = food.some(item => item === '🥬')
console.log(hasAnySalad)
// true

        
        
          
        
      

На практике

Скопировано

Егор Огарков советует

Скопировано

🛠 Из-за того, что результат выполнения метода some() – это boolean-значение, метод можно удобно использовать прямо в условных конструкциях:

        
          
          const drinks = ['🍺', '🍺', '🥃', '🍺', '🍺']if (drinks.some(drink => drink === '🥃')) {  console.log('Order whiskey')}
          const drinks = ['🍺', '🍺', '🥃', '🍺', '🍺']

if (drinks.some(drink => drink === '🥃')) {
  console.log('Order whiskey')
}