Кратко
СкопированоМетод массива 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') }