При работе с массивами JavaScript часто возникают ситуации, когда необходимо подсчитать повторяющиеся элементы. Независимо от того, создаете ли вы инструмент анализа данных или реализуете функцию, требующую обнаружения повторяющихся значений, очень важно знать различные методы подсчета дубликатов. В этой статье блога мы рассмотрим несколько подходов к решению этой задачи, а также приведем примеры кода.
Методы подсчета повторяющихся элементов:
- Использование хэш-карты.
Один из наиболее эффективных способов подсчета дубликатов — использование хеш-карты. Этот метод предполагает перебор массива, сохранение каждого элемента в качестве ключа на карте и увеличение соответствующего значения всякий раз, когда оно появляется снова.
function countDuplicatesWithHashMap(arr) {
const map = {};
arr.forEach((element) => {
map[element] = (map[element] || 0) + 1;
});
return map;
}
const array = [1, 2, 3, 2, 4, 1, 5, 1];
const duplicatesMap = countDuplicatesWithHashMap(array);
console.log(duplicatesMap); // Output: { '1': 3, '2': 2, '3': 1, '4': 1, '5': 1 }
- Использование метода уменьшения():
Методreduce()позволяет нам накапливать значение, применяя функцию к каждому элементу массива. Мы можем использовать этот метод для подсчета дубликатов, инициализируя пустой объект и увеличивая счетчик для каждого встреченного элемента.
function countDuplicatesWithReduce(arr) {
return arr.reduce((acc, element) => {
acc[element] = (acc[element] || 0) + 1;
return acc;
}, {});
}
const array = [1, 2, 3, 2, 4, 1, 5, 1];
const duplicatesCount = countDuplicatesWithReduce(array);
console.log(duplicatesCount); // Output: { '1': 3, '2': 2, '3': 1, '4': 1, '5': 1 }
- Использование методов filter() и include().
В этом подходе мы можем использовать методfilter()в сочетании с методомincludes()для подсчета дубликатов.. Создав новый массив, содержащий только повторяющиеся элементы, мы можем определить количество, сравнивая длины исходного и отфильтрованного массивов.
function countDuplicatesWithFilter(arr) {
const duplicates = arr.filter((element, index) => arr.indexOf(element) !== index);
return duplicates.length;
}
const array = [1, 2, 3, 2, 4, 1, 5, 1];
const duplicatesCount = countDuplicatesWithFilter(array);
console.log(duplicatesCount); // Output: 5
- Использование метода sort():
Сортировка массива позволяет размещать повторяющиеся элементы рядом друг с другом. Проходя по отсортированному массиву и сравнивая каждый элемент с соседним элементом, мы можем увеличивать счетчик всякий раз, когда обнаруживается дубликат.
function countDuplicatesWithSort(arr) {
arr.sort();
let count = 0;
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] === arr[i + 1]) {
count++;
}
}
return count;
}
const array = [1, 2, 3, 2, 4, 1, 5, 1];
const duplicatesCount = countDuplicatesWithSort(array);
console.log(duplicatesCount); // Output: 5
К подсчету повторяющихся элементов в массивах JavaScript можно использовать различные методы, каждый из которых имеет свои преимущества. В этой статье мы рассмотрели четыре различных метода: использование хэш-карты, использование метода сокращения(), использование методов filter() и include() и использование метода sort(). В зависимости от размера и характеристик вашего массива вы можете выбрать наиболее подходящий метод для эффективного подсчета дубликатов.