В этой статье мы рассмотрим различные методы поиска дубликатов в массиве. Некоторые из этих методов подсчитывают только количество дублирующихся элементов, в то время как другие также сообщают нам, какой элемент повторяется, а некоторые делают и то, и другое. Соответственно, вы можете выбрать лучший вариант для вашего варианта использования.
const hasDuplicates = arr => new Set(arr).size !== arr.length;
В этом методе мы сравниваем индекс всех элементов массива с индексом первого появления этого числа. Если они не совпадают, это означает, что элемент является дубликатом. Все такие элементы возвращаются в отдельный массив с помощью метода filter().
Давайте посмотрим на реализацию этого с помощью JavaScript
В приведенной выше реализации выходной массив может иметь дубликаты элементов, если элементы встречались более двух раз в массиве. Чтобы избежать этого и подсчитать количество дублированных элементов, мы можем использовать метод use().
В JavaScript объект состоит из пар ключ-значение, где ключи похожи на индексы в массиве и уникальны. Если попытаться добавить дубликат ключа с другим значением, предыдущее значение для этого ключа перезаписывается новым значением. Мы используем эту концепцию для сравнения и поиска дубликатов.
toFindDuplicates();
function toFindDuplicates() {
let arry = [1, 2, 1, 3, 4, 3, 5];
let toMap = {};
let resultToReturn = false;
for (let i = 0; i < arry.length; i++) {
if (toMap[arry[i]]) {
resultToReturn = true;
// terminate the loop
break;
}
toMap[arr[i]] = true;
}
if (resultToReturn) {
console.log('Duplicate elements exist'
');
}
else {
console.log('Duplicates don'
t exist ');
}
}
Использование функции "some"
В JavaScript функция "some" проверяет условие для всех элементов массива и возвращает значение true, если какой-либо из элементов массива удовлетворяет этому условию.
В функции обратного вызова аргумента мы получаем текущий элемент массива в качестве первого аргумента и индекс текущего элемента в качестве второго аргумента.
Затем мы можем сравнить индекс текущего элемента с индексом первого элемента с тем же значением. Если оба индекса одинаковы, это означает, что дублирующих элементов нет.
toFindDuplicates();
function toFindDuplicates() {
let arry = [1, 2, 1, 3, 4, 3, 5];
let resultToReturn = false;
// call some function with callback function as argument
resultToReturn = arry.some((element, index) => {
return arry.indexOf(element) !== index
});
if (resultToReturn) {
console.log('Duplicate elements exist'
');
}
else {
console.log('Duplicates don'
t exist ');
}
}
Использование итерации
В этом методе мы сравниваем каждый элемент массива со всеми другими элементами массива, чтобы проверить, совпадают ли значения двух элементов, используя вложенный цикл for.
toFindDuplicates();
function toFindDuplicates(element, index) {
let arry = [1, 2, 1, 3, 4, 3, 5];
let resultToReturn = false;
for (let i = 0; i < arry.length; i++) { // nested for loop
for (let j = 0; j < arry.length; j++) {
// prevents the element from comparing with itself
if (i !== j) {
// check if elements' values are equal
if (arry[i] === arry[j]) {
// duplicate element present
resultToReturn = true;
// terminate inner loop
break;
}
}
}
// terminate outer loop
if (resultToReturn) {
break;
}
}
f(resultToReturn) {
console.log('Duplicate elements exist'
');
}
else {
console.log('Duplicates don'
t exist ');
}
}