17.11.2020 в 13:06
LegGnom
JavaScript, как найти дубликаты в массиве
Если вы хотите удалить дубликаты, есть очень простой способ, используя структуру данных Set, предоставляемую JavaScript.
const yourArrayWithoutDuplicates = [...new Set(yourArray)]
Чтобы определить, какие элементы являются дубликатами, вы можете использовать этот «массив без дубликатов», который мы получили, и удалить каждый элемент, который он содержит, из исходного содержимого массива:
const yourArray = [1, 1, 2, 3, 4, 5, 5]
const yourArrayWithoutDuplicates = [...new Set(yourArray)]
let duplicates = [...yourArray]
yourArrayWithoutDuplicates.forEach((item) => {
const i = duplicates.indexOf(item)
duplicates = duplicates
.slice(0, i)
.concat(duplicates.slice(i + 1, duplicates.length))
})
console.log(duplicates) //[ 1, 5 ]
Другое решение - отсортировать массив, а затем проверить, совпадает ли «следующий элемент» с текущим элементом, и поместить его в массив:
const yourArray = [1, 1, 2, 3, 4, 5, 5]
let duplicates = []
const tempArray = [...yourArray].sort()
for (let i = 0; i < tempArray.length; i++) {
if (tempArray[i + 1] === tempArray[i]) {
duplicates.push(tempArray[i])
}
}
console.log(duplicates) //[ 1, 5 ]
Обратите внимание, что это работает только для примитивных значений, но не для объектов. В случае с объектами вам нужен способ их сравнения.