BLACK FRIDAY

остался 1 день

Скидка 10% и подарок на выбор — при покупке одной программы
При покупке двух программ  — вторая со скидкой 50%

Как найти одинаковые элементы в массиве js

Ответы
Аватар пользователя Виктория Аблаева
Виктория Аблаева
20 октября 2022

Найти повторяющиеся значения в массиве можно, используя метод indexOf() и функцию высшего порядка filter:
Рассмотрим пример:

const values = [1, 100, 5, 6, 13, 13, 22, 5];
// предположим, что у нас есть числовой массив
const duplicates = values.filter((number, index, numbers) => {
console.log(number); // number - элемент массива
console.log(index); // index - индекс элемента массива
console.log(numbers); // numbers - представление массива values
return numbers.indexOf(number) !== index;
});

Метод indexOf() возвращает первый индекс, по которому данный элемент может быть найден в массиве.
Соответственно, фильтруем значения, индекс которых не равен индексу, который вернул метод indexOf().

console.log(duplicates); // => [ 13, 5 ] 

Всё получилось! В массив duplicates вернулись дубликаты.

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

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 октября 2021

Для нахождения одинаковых элементов можно использовать следующий алгоритм:

  1. Находим количество вхождений (сколько раз встречается в списке) для каждого элемента
  2. Выводим только те, у которых количество вхождений больше 1

Алгоритм можно реализовать с помощью цикла:

const numbers = [4, 3, 3, 1, 15, 7, 4, 19, 19]; // исходный массив

const countItems = {}; // здесь будет храниться промежуточный результат

// получаем объект в котором ключ - это элемент массива, а значение - сколько раз встречается элемент в списке
// например так будет выглядеть этот объект после цикла:
// {1: 1, 3: 2, 4: 2, 7: 1, 15: 1, 19: 2}
// 1 встречается в тексте 1 раз, 2 встречается 2 раза, 4 встречается 2 раза и так далее
for (const item of numbers) {
  // если элемент уже был, то прибавляем 1, если нет - устанавливаем 1
  countItems[item] = countItems[item] ? countItems[item] + 1 : 1;
}

// обрабатываем ключи объекта, отфильтровываем все, что меньше 1
const result = Object.keys(countItems).filter((item) => countItems[item] > 1);
console.dir(result); // => ['3', '4', '19']
Добавьте ваш ответ

Рекомендуемые курсы

Алгоритмы сортировки
Структуры данных
Бинарный поиск
Жадные алгоритмы
10 часов
Посмотреть
полифиллы
AJAX
события
селекторы
20 часов
Посмотреть
middlewares
redux-forms
actions
reselect
5 часов
Посмотреть