/
Вопросы и ответы
/
JavaScript
/

Как проверить есть ли элемент в массиве js

Как проверить есть ли элемент в массиве js

5 лет назад

Человек-Молекула

Ответы

0

Для этого в JS существует метод includes(), который работает на массивах. Метод includes() принимает два аргумента, один из которых обязательный. Это искомый элемент. После выполнения метод возвращает true или false в зависимости от того, есть элемент в массиве или нет. Ниже я привёл пример использования данного метода:

1
2
3
const collection = ['something', 'hexlet', 'something else'];
const isHexletInCollection = collection.includes('hexlet');
console.log(isHexletInCollection); // => true

5 лет назад

Roman Ashikov

0

Для поиска элемента в массиве можно использовать метод indexOf(), если элемент не найден, он возвращает -1, если найден — индекс элемента:

1
2
3
const collection = ['something', 'hexlet', 'something else'];
const isHexletInCollection = arr.indexOf('hexlet') != -1;
console.log(isHexletInCollection); // => true

4 года назад

Aleksandr Litvinov

0

Для того, чтобы проверить, есть ли элемент в массиве, могут помочь не только стандартные методы, о которых писали выше. К примеру, есть библиотека Lodash, в которой присутствуют методы для поиска элементов в массиве.

Метод _.indexOf()

Этот метод устроен достаточно хитро, его можно использовать в двух вариантах:

  • Первый вариант использования:
1
2
3
4
5
const numbers = [1, 2, 1, 2];
const findNumber = 2;
const findIndex = _.indexOf(numbers, findNumber); // => 1
//В переменной findIndex окажется число 1 (индекс искомого элемента). 
//Если число 2 бы не нашлось, что в переменную findIndex было бы присвоено -1.

Как видно из примера выше, метод нашёл тот элемент, который встретился первым. Но, что делать, если в данном массиве есть и другие элементы, которые равны искомому?
Здесь начинается самое интересное. Данный метод может найти элемент, который равен искомому, но после определенного индекса.

  • Второй вариант использования:
1
2
3
4
5
6
const numbers = [1, 2, 1, 2];
const findNumber = 2;
const indexAfter = 2;
const findIndex = _.indexOf(numbers, findNumber, indexAfter); // => 3
// Ищем число 2 после индекса 2. В итоге в переменной оказалось число 3. 
//Почему? 3 - индекс искомого числа, который встретился после второго индекса.

Если вдруг вам нужно выполнить поиск элемента массива не слева направо, а наоборот, в библиотеке Lodash найдётся и такой метод.
Он работает ровно зеркально методу _.indexOf().

Метод _.lastIndexOf()

  • Первый вариант использования:
1
2
3
const numbers = [1, 2, 1, 2];
const findNumber = 2;
const findIndex = _.lastIndexOf(numbers, findNumber); // => 3

В переменную findIndex вернулся индекс совпадающего значения, но не от начала массива, а от его конца.

  • Второй вариант использования:
1
2
3
4
const numbers = [1, 2, 1, 2];
const findNumber = 2;
const indexAfter = 2;
const findIndex = _.lastIndexOf(numbers, findNumber, indexAfter); // => 1

В переменную findIndex вернулся индекс совпадающего значения, после второго индекса (но опять же не от начала массива, а от его конца).

Документация:

_.indexOf()
_.lastIndexOf()

4 года назад

Виктория Аблаева

0

Проверить, есть ли значение в массиве, проще всего методом includes(). Он возвращает true или false:

1
2
3
4
const fruits = ['яблоко', 'груша', 'слива'];

console.log(fruits.includes('груша')); // => true
console.log(fruits.includes('банан')); // => false

includes() сравнивает строго, как ===: [1, 2].includes('1') вернёт false. В отличие от indexOf(), он находит NaN.

Нужна позиция элемента

indexOf() возвращает индекс или -1, если элемента нет:

1
2
console.log(fruits.indexOf('слива')); // => 2
console.log(fruits.indexOf('банан')); // => -1

Массив объектов

includes() сравнивает объекты по ссылке, поэтому users.includes({ id: 2 }) вернёт false. Для поиска по полю используйте some():

1
2
3
4
5
const users = [{ id: 1, name: 'Анна' }, { id: 2, name: 'Олег' }];

console.log(users.some((user) => user.id === 2));  // => true
console.log(users.find((user) => user.id === 2));  // => { id: 2, name: 'Олег' }
console.log(users.findIndex((user) => user.id === 3)); // => -1

some() отвечает «есть или нет», find() возвращает сам элемент, findIndex() — его индекс.

Без учёта регистра

1
2
3
const tags = ['JavaScript', 'React'];
const query = 'react';
console.log(tags.some((tag) => tag.toLowerCase() === query.toLowerCase())); // => true

Много проверок

Если проверять приходится часто, превратите массив в Set — поиск в нём быстрее:

1
2
const allowed = new Set(['admin', 'editor']);
console.log(allowed.has('editor')); // => true

Методы массивов разбирают в бесплатном курсе «Основы JavaScript».

2 дня назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845