Как найти одинаковые элементы в массиве js?
Ответы
Ivan Gagarinov
22 октября 2021
Для нахождения одинаковых элементов можно использовать следующий алгоритм:
- Находим количество вхождений (сколько раз встречается в списке) для каждого элемента
- Выводим только те, у которых количество вхождений больше 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 раз, 3 встречается 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']
5
0
Виктория Аблаева
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 вернулись дубликаты.
Документация:
- indexOf()
4
0