Поиск одинаковых элементов в массиве на Javascript
30.08.2018
/
oberset
Эту задачу можно переформулировать по-другому: необходимо отбросить все элементы массива, которые встречаются не больше одного раза. На выходе останутся только повторяющиеся значения. Для решения задачи потребуется перебрать все элементы массива и для каждого элемента попытаться найти ему пару (другой элемент, который равен текущему). Для решения задачи можно написать обход массива в цикле, но у объекта Array уже есть несколько удобных методов, которые нам помогут.
Первый вариант решения задачи с помощью комбинации методов reduce и filter:
const exampleArray = [1, 2, 3, 1, 3, 4, 5, 5, 1, '', undefined, undefined, null];
const duplicates = array =>
array.reduce((list, value) => {
if (array.filter(
needle => needle === value
).length > 1) {
list.push(value);
}
return list;
}, []);
console.log(duplicates(exampleArray));
// [1, 3, 1, 3, 5, 5, 1, undefined, undefined]
Второй возможный вариант решения с помощью методов filter и findIndex:
const exampleArray = [1, 2, 3, 1, 3, 4, 5, 5, 1, '', undefined, undefined, null];
const duplicates = array =>
array.filter(value => {
const index = array.findIndex(
needle => needle === value
);
return array.findIndex(
(needle, i) => {
return needle === value && i !== index;
}
) > -1;
}
);
console.log(duplicates(exampleArray));
// [1, 3, 1, 3, 5, 5, 1, undefined, undefined]
Оба варианта функции принимают исходный массив в качестве параметра и возвращают массив, содержащий только не уникальные элементы. Значения null и undefined при этом тоже учитываются.
Примеры поиска значений в массиве с помощью методов find, findIndex, includes, every и других.
Метод reduce(callback, initialValue) возвращает результат функции callback, которая применяется к каждому элементу массива.
Несколько наиболее простых вариантов получения массива уникальных(неповторяющихся) значений в Javascript.