Как найти число в массиве
Перейти к содержимому

Как найти число в массиве

  • автор:

Поиск элементов в массиве JavaScript

Для поиска по массиву в JavaScript существует несколько методов прототипа Array, не считая что поиск можно выполнить и методами для перебора массива и в обычном цикле.

Итак, мы сегодня рассмотрим следующие варианты:

  • Array.includes()
  • Array.indexOf()
  • Array.find()
  • Array.findIndex()
  • Array.filter()
  • Array.forEach()

Array.includes() — есть ли элемент в массиве

Данный метод ищет заданный элемент и возвращает true или false , в зависимости от результата поиска. Принимает два параметра:

  • element — то, что мы будем искать
  • fromIndex (необязательный) — с какого индекса начинать поиск. По умолчанию с 0.
const arr = ['Apple', 'Orange', 'Lemon', 'Cherry']; console.log(arr.includes('Apple')); // true console.log(arr.includes('Apple', 1)); // false

Как видно из примера выше, в первом случае мы получим true , т.к. начали с нулевого элемента массива. Во втором случае мы передали второй параметр — индекс, с которого нужно начать поиск — и получили false , т.к. дальше элемент не был найден.

Array.indexOf() — индекс элемента в массиве

Данный метод, в отличие от предыдущего, возвращает индекс первого найденного совпадения. В случае если элемент не найден, будет возвращено число -1

Также принимает два параметра:

  • element — элемент, который мы будем искать
  • fromIndex (необязательный) — с какого индекса начинать поиск. По умолчанию с 0.
const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; console.log(arr.indexOf('Apple')); // 0 console.log(arr.indexOf('Apple', 1)); // 4 console.log(arr.indexOf('Orange', 2)); // -1

Как видно из примера выше, в первом случае мы получаем 0, т.к. сразу нашли первый элемент массива (первое совпадение, дальше поиск уже не выполняется). Во втором случае 4, т.к. начали поиск с индекса 1 и нашли следующее совпадение. В третьем примере мы получили результат -1, т.к. поиск начали с индекса 2, а элемент Orange в нашем массиве под индексом 1.

Так как данный метод возвращает индекс или -1, мы можем присвоить результат в переменную для дальнейшего использования:

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; const index = arr.indexOf('Lemon'); if (index !== -1) < // сделать что-то >

Чтобы произвести какие-то действия над найденным элементом массива, мы можем использовать следующий синтаксис:

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; const index = arr.indexOf('Lemon'); arr[index] = 'Lime'; // заменяем найденный элемент console.log(arr)ж // ['Apple', 'Orange', 'Lime', 'Cherry', 'Apple']

Примеры использования данного метода вы можете также найти в посте про удаление элемента из массива

Array.find() — найти элемент по условию

Данный метод callback и thisArg в качестве аргументов и возвращает первое найденное значение.

Callback принимает несколько аргументов:
item — текущий элемент массива
index — индекс текущего элемента
currentArray — итерируемый массив

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; const apple = arr.find(item => item === 'Apple'); console.log(apple); // Apple

Данный метод полезен тем, что мы можем найти и получить сразу и искомый элемент, и его index

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; let indexOfEl; const apple = arr.find((item, index) => < if (item === 'Apple') < indexOfEl = index; return item; >>); console.log(apple, indexOfEl); // Apple 0

Также работа кода прекратиться как только будет найден нужный элемент и второй элемент (дубликат) не будет найден.

В случае если ничего не найдено будет возвращен undefined .

Array.findIndex() — найти индекс элемента в массиве

Этот метод похож на метод find() , но возвращать будет только индекс элемента, который соответствует требованию. В случае, если ничего не найдено, вернет -1

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; const index = arr.findIndex(item => item === 'Apple'); console.log(index); // 0

Ну и по аналогии с предыдущим методом, поиск завершается после первого совпадения.

Поиск всех совпадений в массиве

Метод filter() кроме всего остального также можно использовать для поиска по массиву. Предыдущие методы останавливаются при первом соответствии поиска, а данный метод пройдется по массиву до конца и найдет все элементы. Но данный метод вернет новый массив, в который войдут все элементы соответствующие условию.

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; const filteredArr = arr.filter(item => item === 'Apple'); console.log(filteredArr); // ['Apple', 'Apple'] console.log(arr); // ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple'];

Как видите из примера выше, первоначальный массив не будет изменен.

Подробнее про метод JS filter() можете прочитать в этом посте.

Для этих же целей можно использовать метод forEach(), который предназначен для перебора по массиву:

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; let indexes = []; arr.forEach((item, index) => < if (item === 'Apple') indexes.push(index) >); console.log(indexes); // [0, 4]

В массив indexes мы получили индексы найденных элементов, это 0 и 4 элементы. Также в зависимости от вашей необходимости, можно создать объект, где ключом будет индекс, а значением сам элемент:

const arr = ['Apple', 'Orange', 'Lemon', 'Cherry', 'Apple']; let arrObjMap = <>; arr.forEach((item, index) => < if (item === 'Apple') < arrObjMap[index] = item; >>); console.log(arrObjMap); //

Поиск в массиве объектов

Если у вас массив состоит не из примитивных типов данных, а к примеру, каждый элемент это объект со своими свойствами и значениями, тогда можно использовать следующие варианты для получения индекса элемента.

Первый способ. С использованием метода map для массива

const arr = [ < name: 'Ben', age: 21 >, < name: 'Clif', age: 22 >, < name: 'Eric', age: 18 >, < name: 'Anna', age: 27 >, ]; const index = arr.map(item => item.name).indexOf('Anna'); console.log(index); //3 console.log(arr[index]); //

В данном случае по массиву arr мы проходим и на каждой итерации из текущего элемента (а это объект со свойствами name и age ) возвращаем имя человека в новый массив и сразу же выполняем поиск по новому массиву на имя Anna. При совпадении нам будет возвращен индекс искомого элемента в массиве.

Второй способ. Данный вариант будет немного проще, т.к. мы можем сразу получить индекс при совпадении:

const index = arr.findIndex(item => item.name === 'Anna'); console.log(index); //3 console.log(arr[index]); //

Заключение

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

Ваши вопросы и комментарии:

Добавить комментарий Отменить ответ

Свежие записи

  • MySQL IS NULL — проверка поля на NULL
  • MySQL LIKE — поиск по паттерну
  • Between MySQL — оператор для выборки по диапазону значений
  • MySQL IN и NOT IN — несколько условий
  • MySQL WHERE — синтаксис и примеры

Как найти число в массиве чисел, число я получу при клике на элемент, и если такое есть, то удалить из массива?

Есть массив чисел, который я формирую при кликах по элементам [2, 5, 7, 12, 25, 36, 9, 222, 55, 34, 73, 29]
Потом кликаю на этот же элемент, и нужно проверить число которое я получил, есть ли в этом масиве, если да, то удалить его из массива.

  • Вопрос задан более трёх лет назад
  • 941 просмотр

Комментировать

Решения вопроса 1

var array = [2, 5, 7, 12, 25, 36, 9, 222, 55, 34, 73, 29]; var i = array.indexOf(25); if(i != -1)

>> [ 2, 5, 7, 12, 36, 9, 222, 55, 34, 73, 29]

Ответ написан более трёх лет назад

Нравится 3 1 комментарий

Роман Савицкий @PRC Автор вопроса

Большое спасибо Вам добрые люди))

Ответы на вопрос 2

Fqyeh29

Как найти число в массиве java

Для того, чтобы найти число в массиве в Java , можно использовать цикл для перебора элементов массива и условный оператор для сравнения каждого элемента с искомым числом. Если число будет найдено, то можно вернуть его индекс в массиве или само число.

Пример кода для поиска числа в массиве:

public static int findNumberInArray(int[] array, int number)  for (int i = 0; i  array.length; i++)  if (array[i] == number)  return i; // возвращаем индекс элемента, если он найден > > return -1; // возвращаем -1, если элемент не найден > 

Как найти самое часто встречаемое число в массиве?

Добрый день, подскажите пожалуйста, как можно решить задачу
Есть массив
const arr = [1,2,2,2,4]
как определить что двойка само встречающийся элемент в массиве
какой должен быть алгоритм действий
я бегу циклом по массиву и я не понимаю, как мне группировать одинаковые элементы

  • Вопрос задан более года назад
  • 1416 просмотров

Комментировать

Решения вопроса 3

0xD34F

0xD34F @0xD34F Куратор тега JavaScript

const mostFrequentNum = Array .from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map)) .reduce((max, n) => max[1] > n[1] ? max : n, [ , 0 ])[0];
const mostFrequentNum = Object .entries(arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), <>)) .reduce((acc, n) => (acc[n[1]] = +n[0], acc), []) .pop();

Ответ написан более года назад

Нравится 3 2 комментария

как хорошо, что я не фронтенд-разработчик) Выглядит как обфусцированное расширение для браузера в котором я пытался разобраться)
А может, даже хуже

WblCHA

Ещё как вариант через сорт:

Number(Object .entries(arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), <>)) .sort((a, b) => b[1] - a[1])[0][0])

Dr_Elvis

В гугле забанен

первое что пришло в голову:

a = [1,2,3,5,7,8,3,2,5,7,6,3,1,5,4,2,3,4,4,5,6,2,1,3,4,1,2,3,2,3,4,1,4,2,2,3,4,1,2,3,4] b = <> for(x of a) < if(b[x])< b[x] = b[x]+1; >else < b[x] = 1; >> let maxKey, maxValue = 0; for(const [key, value] of Object.entries(b)) < if(value >maxValue) < maxValue = value; maxKey = key; >> console.log(`Ключ $ имеет больше всего повторений - $`);

Ответ написан более года назад

Нравится 2 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *