← Назад к вопросам

Какой метод ищет элемент в массиве и возвращает true или false?

2.0 Middle🔥 231 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод includes() для проверки наличия элемента в массиве

В JavaScript для поиска элемента в массиве и возврата булевого значения (true или false) предназначен метод includes(). Этот метод появился в стандарте ES2016 (ES7) и является наиболее простым и читаемым способом проверки наличия элемента в массиве.

Основные характеристики метода includes()

  • Возвращаемое значение: true, если элемент найден в массиве, и false — если нет.
  • Чувствительность к типу данных: метод строго сравнивает элементы, учитывая их тип (аналогично оператору ===).
  • Параметры:
    • searchElement — искомый элемент.
    • fromIndex (необязательный) — индекс, с которого начинать поиск (по умолчанию 0). Может быть отрицательным, тогда отсчёт идёт с конца массива.
  • Иммутабельность: метод не изменяет исходный массив.

Примеры использования includes()

const numbers = [1, 2, 3, 4, 5];

// Базовый пример
console.log(numbers.includes(3)); // true
console.log(numbers.includes(6)); // false

// Строгая типизация
console.log(numbers.includes('3')); // false (строка vs число)

// Использование отрицательного индекса
console.log(numbers.includes(2, -4)); // true (поиск с индекса 1)

// Работа со строками
const languages = ['JavaScript', 'TypeScript', 'Python'];
console.log(languages.includes('JavaScript')); // true
console.log(languages.includes('javaScript')); // false (регистр имеет значение)

Альтернативные методы поиска с возвратом boolean

Хотя includes() является наиболее прямым способом, существуют и другие подходы, которые могут возвращать true/false:

1. Метод indexOf() (до появления includes()):

const arr = [10, 20, 30];
const exists = arr.indexOf(20) !== -1; // true

2. Метод some() (полезен для сложных условий):

const users = [
  { id: 1, name: 'Анна' },
  { id: 2, name: 'Иван' }
];
const hasIvan = users.some(user => user.name === 'Иван'); // true

3. Метод find() с преобразованием в boolean:

const numbers = [5, 12, 8, 130, 44];
const found = Boolean(numbers.find(num => num > 10)); // true

Сравнение includes() с альтернативами

МетодВозвращаемое значениеПлюсыМинусы
includes()true/falseПростой синтаксис, читаемостьНе поддерживается в очень старых браузерах
indexOf()-1 или индексУниверсальная поддержкаТребует дополнительной проверки
some()true/falseГибкость (можно использовать с функциями-колбэками)Избыточен для простых проверок

Особенности и важные нюансы

  1. Работа с объектами: includes() не подходит для поиска объектов по содержимому, так как сравнивает ссылки:

    const obj = { id: 1 };
    const arr = [{ id: 1 }, { id: 2 }];
    console.log(arr.includes(obj)); // false (разные ссылки)
    console.log(arr.includes(arr[0])); // true (та же ссылка)
    
  2. Поиск NaN: В отличие от indexOf(), includes() корректно работает с NaN:

    const arr = [1, NaN, 3];
    console.log(arr.includes(NaN)); // true
    console.log(arr.indexOf(NaN)); // -1 (так как NaN !== NaN)
    
  3. Поддержка браузерами: Метод поддерживается во всех современных браузерах, но для поддержки в старых окружениях может потребоваться полифил.

Полифил для старых браузеров

// Полифил для includes()
if (!Array.prototype.includes) {
  Array.prototype.includes = function(searchElement, fromIndex) {
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }
    
    const o = Object(this);
    const len = o.length >>> 0;
    
    if (len === 0) {
      return false;
    }
    
    const n = fromIndex | 0;
    let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    
    while (k < len) {
      if (o[k] === searchElement) {
        return true;
      }
      k++;
    }
    
    return false;
  };
}

Заключение

Метод includes() является предпочтительным выбором для проверки наличия элемента в массиве, когда нужен простой и читаемый код, возвращающий true или false. Он сочетает в себе простоту использования, корректную работу с NaN и современный синтаксис. Для более сложных условий поиска или работы со старыми окружениями могут потребоваться альтернативные подходы с some() или indexOf().

Какой метод ищет элемент в массиве и возвращает true или false? | PrepBro