Проверка наличия строки в массиве JavaScript/jQuery
Быстрый ответ
Для проверки наличия конкретной строки в массиве можно воспользоваться методом includes
:
const fruits = ['яблоко', 'банан', 'манго'];
const hasBanana = fruits.includes('банан'); // вернёт true
Метод includes
прост в использовании: если элемент присутствует в массиве, он возвращает true
, в противном случае — false
.
Однако, в некоторых более сложных ситуациях могут быть уместны методы indexOf
и some
.
'indexOf': стоит ли использовать?
Метод indexOf
указывает на позицию элемента в массиве и может применяться для условных конструкций. Плюс, он хорошо совместим со взрослыми браузерами.
const pets = ['кот', 'собака', 'попугай'];
const dogPosition = pets.indexOf('собака');
// dogPosition будет равен 1
'some': монах в мире однозадачности
Метод some
просматривает массив и проверяет, соответствует ли хотя бы один из его элементов заданному условию.
const tools = ['молоток', 'отвёртка', 'гаечный ключ'];
const hasWrench = tools.some(tool => tool === 'гаечный ключ');
// hasWrench возвращает true
Механика регистрозависимого поиска и эффективность
Для того чтобы поиск был нечувствителен к регистру, приводите строки к одному регистру перед поиском:
const cities = ['Париж', 'Берлин', 'рим'];
const searchCity = 'РИМ';
const normalizedSearch = cities.map(city => city.toLowerCase()).includes(searchCity.toLowerCase());
// normalizedSearch вернёт true
При работе с большими массивами дабы ускорить поиск используйте самые быстрые методы или настройте собственные циклы.
Простой цикл и чары полифилла
Пример проверки наличия элемента с помощью простого цикла for
и булева флага:
let books = ["Гордость и предубеждение", "1984", "Великий Гэтсби"];
let specialBook = "1984";
let isFound = false;
for (let i = 0; i < books.length; i++) {
if (books[i] === specialBook) {
isFound = true;
break;
}
}
// isFound вернёт true
Для обеспечения поддержки современных методов, включая includes
, в старых браузерах используйте полифилы.
Допинговать код через инкапсуляцию функций
Создайте функцию для повторного использования проверки находится ли строка в массиве:
function containsString(array, string) {
return array.includes(string);
}
const vegetables = ['морковь', 'горошек', 'салат'];
const lookingFor = 'горошек';
const found = containsString(vegetables, lookingFor); // вернёт true
Визуализация
Представьте процесс поиска как разыскивание "Золотого билета" среди обёрток шоколадных батончиков. Если foundTicket
истинно, значит вы нашли свое сокровище.
Ринг кодирования
Переход от jQuery
Для увеличения эффективности и избавления от зависимостей используйте нативный JavaScript вместо методов jQuery типа $.inArray
.
Поиск строк по шаблону
Для поиска по шаблону используйте filter
вместе с регулярными выражениями:
const wordPattern = /книга/i;
const library = ["Учебник", "Тетрадь", "Кулинарная книга"];
const filtered = library.filter(item => wordPattern.test(item));
ES6 приходит на помощь
Стандарт ES6 вводит улучшенные методы, такие как includes
и some
, делающие код более современным и функциональным.
Полезные материалы
- Array.prototype.includes() – JavaScript | MDN — официальная документация MDN.
- javascript – Determine whether an array contains a value – Stack Overflow — реальные примеры и обсуждение экспертов.
- Массивы – JavaScript.info — подробное руководство по методам массивов.
- Метод массива indexOf() – W3Schools — учебник по использованию метода 'indexOf'.
- ECMAScript® 2016 Language Specification — спецификация метода 'includes' по стандарту ECMAScript.
- jQuery.inArray() | jQuery API Documentation — документация по использованию метода в jQuery.