JavaScript предлагает мощные встроенные функции, которые позволяют нам искать определенные значения в массивах или строках. Для этой цели широко используются два метода: indexOf() и include(). В этой статье мы углубимся в эти методы и рассмотрим 20 фрагментов кода JavaScript, демонстрирующих их функциональность. Поняв поток кода, стоящий за этими фрагментами, вы получите знания для эффективного поиска значений в своих программах на JavaScript.

Фрагмент кода 1: базовое использование indexOf()

const fruits = ['apple', 'banana', 'orange'];
const index = fruits.indexOf('banana');
console.log(index); // Output: 1

Объяснение. В этом фрагменте мы создаем массив с именем fruits и используем метод indexOf() для поиска индекса строки 'banana' в массиве. Метод возвращает позицию индекса (в данном случае 1), где найдено значение. Затем мы записываем индекс в консоль.

Фрагмент кода 2: обработка несуществующих значений с помощью indexOf()

const fruits = ['apple', 'banana', 'orange'];
const index = fruits.indexOf('grape');
console.log(index); // Output: -1

Объяснение. Если метод indexOf() не находит заданное значение в массиве, он возвращает -1. В этом примере, поскольку «виноград» отсутствует в массиве fruits, возвращаемый индекс равен -1.

Фрагмент кода 3: проверка включения массива с помощью include()

const fruits = ['apple', 'banana', 'orange'];
const includesFruit = fruits.includes('banana');
console.log(includesFruit); // Output: true

Объяснение. Метод includes() проверяет, существует ли указанное значение в массиве. В этом фрагменте мы определяем, присутствует ли «банан» в массиве fruits. Метод возвращает логическое значение (в данном случае true), указывающее, найдено ли значение.

Фрагмент кода 4: поиск подстрок с помощью include()

const sentence = 'I love JavaScript!';
const includesWord = sentence.includes('JavaScript');
console.log(includesWord); // Output: true

Объяснение. Метод includes() не ограничивается массивами; он также может искать подстроки в строке. В этом фрагменте мы проверяем, присутствует ли строка «JavaScript» в строке sentence. Метод возвращает true, так как подстрока найдена.

Фрагмент кода 5: учет регистра с помощью include()

const sentence = 'I love JavaScript!';
const includesWord = sentence.includes('javascript');
console.log(includesWord); // Output: false

Объяснение. Метод includes() выполняет поиск с учетом регистра. В этом примере «javascript» не найден в строке sentence, потому что регистр не соответствует «JavaScript».

Фрагмент кода 6: поиск по определенному индексу с помощью indexOf()

const fruits = ['apple', 'banana', 'orange', 'banana'];
const index = fruits.indexOf('banana', 2);
console.log(index); // Output: 3

Объяснение. Указав второй аргумент метода indexOf(), мы можем указать индекс, с которого должен начинаться поиск. В этом случае мы начинаем искать «банан» с индекса 2 и находим его с индексом 3. Следовательно, возвращаемый индекс равен 3.

Фрагмент кода 7: несколько вхождений с indexOf()

const fruits = ['apple', 'banana', 'orange', 'banana'];
let index = fruits.indexOf('banana');
while (index !== -1) {
  console.log(index);
  index = fruits.indexOf('banana', index + 1);
}

Объяснение. В этом фрагменте показано, как найти несколько вхождений значения в массиве с помощью метода indexOf(). Мы инициализируем переменную index первым вхождением «банана». Затем внутри цикла while мы регистрируем текущий индекс и обновляем переменную index, чтобы найти следующее вхождение. Цикл продолжается до тех пор, пока не будет найдено больше вхождений.

Фрагмент кода 8: сравнение include() и indexOf()

const fruits = ['apple', 'banana', 'orange'];
console.log(fruits.includes('apple')); // Output: true
console.log(fruits.indexOf('apple') !== -1); // Output: true

Объяснение. И includes(), и indexOf() можно использовать для определения наличия значения в массиве. В этом фрагменте мы сравниваем результаты обоих методов для значения «яблоко». Оба утверждения возвращают значение true, указывая на то, что в массиве fruits присутствует слово «яблоко».

Фрагмент кода 9. Проверка наличия в массиве подмассива

const nestedArray = [[1, 2], [3, 4], [5, 6]];
const subarray = [3, 4];
const includesSubarray = nestedArray.some(arr => arr.includes(...subarray));
console.log(includesSubarray); // Output: true

Объяснение. Метод includes() также можно использовать для проверки наличия в массиве определенного подмассива. В этом примере у нас есть вложенный массив с именем nestedArray, и мы хотим проверить, содержит ли он подмассив [3, 4]. Используя метод some() и распространяя элементы subarray в качестве аргументов в методе includes(), мы можем определить, существует ли подмассив в nestedArray.

Фрагмент кода 10: поиск последнего индекса с помощью lastIndexOf()

const fruits = ['apple', 'banana', 'orange', 'banana'];
const lastIndex = fruits.lastIndexOf('banana');
console.log(lastIndex); // Output: 3

Объяснение. Метод lastIndexOf() работает аналогично indexOf(), но начинает поиск с конца массива, а не с начала. В этом случае мы находим последнее вхождение «банана» в массиве fruits, который находится в индексе 3.

Фрагмент кода 11: определение уникальности массива

const numbers = [1, 2, 3, 4, 4, 5, 6, 6];
const uniqueNumbers = numbers.filter((value, index, array) => array.indexOf(value) === index);
console.log(uniqueNumbers); // Output: [1, 2, 3, 4, 5, 6]

Объяснение. Чтобы отфильтровать повторяющиеся значения из массива, мы можем использовать комбинацию методов filter() и indexOf(). В этом фрагменте мы создаем новый массив с именем uniqueNumbers, отфильтровывая элементы, которые имеют тот же индекс, что и их первое вхождение. Результирующий массив содержит только уникальные значения.

Фрагмент кода 12: поиск без учета регистра

const sentence = 'I love JavaScript!';
const includesWord = sentence.toLowerCase().includes('javascript');
console.log(includesWord); // Output: true

Объяснение. Чтобы выполнить поиск без учета регистра, мы можем преобразовать строку в нижний (или верхний) регистр перед применением метода includes(). В этом примере мы преобразуем sentence в нижний регистр, а затем ищем «javascript». Метод возвращает true, независимо от разницы в регистре.

Фрагмент кода 13: поиск объектов с помощью include()

const persons = [
  { name: 'John', age: 25 },
  { name: 'Alice', age: 30 },
  { name: 'Bob', age: 35 }
];
const targetPerson = { name: 'Alice', age: 30 };
const includesPerson = persons.includes(targetPerson);
console.log(includesPerson); // Output: false

Объяснение. Метод includes() сравнивает значения, используя строгое равенство (===). При поиске объектов в массиве метод проверяет ссылку на конкретный объект. В этом фрагменте targetPerson не найдено в массиве persons, поскольку это другой объект, хотя свойства совпадают.

Фрагмент кода 14: Поиск объектов с помощью indexOf()

const persons = [
  { name: 'John', age: 25 },
  { name: 'Alice', age: 30 },
  { name: 'Bob', age: 35 }
];
const targetPerson = { name: 'Alice', age: 30 };
const index = persons.findIndex(person => 
  person.name === targetPerson.name && person.age === targetPerson.age
);
console.log(index); // Output: 1

Объяснение: при поиске объектов в массиве нам нужно использовать метод findIndex() вместо indexOf(). В этом примере мы находим индекс объекта, который соответствует targetPerson, сравнивая свойства name и age. Возвращаемый индекс равен 1, что указывает на позицию соответствующего объекта в массиве.

Фрагмент кода 15: поиск значений NaN

const numbers = [1, 2, NaN, 4, 5];
console.log(numbers.includes(NaN)); // Output: true
console.log(numbers.indexOf(NaN)); // Output: -1

Объяснение. Метод includes() может найти наличие NaN значений в массиве. Однако метод indexOf() не может найти NaN напрямую, потому что NaN не равно самому себе. Во втором console.log возвращается -1, чтобы указать, что NaN не найдено.

Фрагмент кода 16: поиск неопределенных значений

const values = [1, 2, undefined, 4, 5];
console.log(values.includes(undefined)); // Output: true
console.log(values.indexOf(undefined)); // Output: 2

Объяснение. И includes(), и indexOf() могут обрабатывать поиск значений undefined в массиве. В этом фрагменте мы ищем наличие и индекс undefined в массиве values. Результаты показывают, что undefined присутствует в индексе 2.

Фрагмент кода 17: проверка префикса строки

const word = 'JavaScript is amazing!';
const hasPrefix = word.startsWith('JavaScript');
console.log(hasPrefix); // Output: true

Explanation: метод startsWith() проверяет, начинается ли строка с указанного префикса. В этом фрагменте мы определяем, начинается ли строка word с «JavaScript». Метод возвращает true, указывая, что строка действительно имеет этот префикс.

Фрагмент кода 18: проверка суффикса строки

const word = 'JavaScript is amazing!';
const hasSuffix = word.endsWith('amazing!');
console.log(hasSuffix); // Output: true

Объяснение. Метод endsWith() проверяет, заканчивается ли строка указанным суффиксом. Здесь мы проверяем, заканчивается ли word на «удивительно!». Метод возвращает true, указывая, что строка имеет желаемый суффикс.

Фрагмент кода 19: поиск пустой строки

const sentence = 'I love JavaScript!';
const includesEmpty = sentence.includes('');
console.log(includesEmpty); // Output: true

Объяснение: использование includes() с пустой строкой в ​​качестве аргумента позволяет нам проверить, содержит ли строка вообще какие-либо символы. В этом фрагменте мы определяем, содержит ли sentence пустую строку, и метод возвращает true, поскольку строка не пуста.

Фрагмент кода 20: проверка равенства массивов с помощью include()

const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
const isEqual = arr1.includes(...arr2) && arr2.includes(...arr1);
console.log(isEqual); // Output: true

Объяснение.Метод includes() можно использовать для проверки равенства двух массивов. В этом фрагменте у нас есть arr1 и arr2, которые имеют одинаковые элементы. Распространяя элементы одного массива в качестве аргументов в методе includes() другого массива, мы можем проверить, включают ли они друг друга. Переменная isEqual равна true, поскольку оба массива включают все элементы другого массива.

Обзор:

В этой статье мы рассмотрели методы indexOf() и includes() в JavaScript, которые позволяют нам искать значения в массивах и строках. Мы рассмотрели различные варианты использования, такие как базовое использование, обработка несуществующих значений, чувствительность к регистру, поиск по определенным индексам, поиск последнего индекса и многое другое. Кроме того, мы рассмотрели такие сценарии, как проверка включения массива, поиск подстрок, сравнение include() и indexOf(), фильтрация уникальных значений массива и поиск объектов. Освоив эти методы, вы сможете эффективно искать значения в своих программах на JavaScript и расширять функциональные возможности своих приложений.

Надеюсь, что приведенная выше статья дала лучшее понимание. Если у вас есть какие-либо вопросы относительно областей, которые я обсуждал в этой статье, области улучшения, не стесняйтесь комментировать ниже.

[Раскрытие информации: эта статья является совместным творением, в котором мои собственные идеи сочетаются с помощью ChatGPT для оптимальной артикуляции.]