предисловие
Дедупликация — горячая проблема, с которой часто сталкиваются при разработке, но текущая ситуация в проекте такова, что фоновый интерфейс использует SQL для дедупликации, что является простым и эффективным, и в основном не позволяет выполнять дедупликацию во фронтенд-обработке.
Так что же происходит с дедупликацией внешней обработки? Если на каждой странице отображается 10 разных фрагментов данных, если повторение данных серьезное, то для отображения 10 фрагментов данных может потребоваться отправить несколько HTTP-запросов, чтобы иметь возможность отфильтровать 10 различных фрагментов данных, и если это дедуплицируется в фоновом режиме. Только один http-запрос может получить 10 разных фрагментов данных.
Конечно, это не означает, что дедупликация на интерфейсе не нужна, и ею все равно нужно умело пользоваться. В этой статье в основном представлены несколько распространенных методов дедупликации массива.
реализация метода
Дедупликация двойного цикла
Двойной цикл for (или while) — неуклюжий способ, и он делает это очень просто: определите массив, содержащий первый элемент исходного массива, затем выполните итерацию по исходному массиву, сравнивая каждый элемент в исходном массиве с новым. array Сравните каждый элемент массива , добавьте его в новый массив, если он не повторяется, и, наконец, верните новый массив; поскольку его временная сложность равна O(n^2), если длина массива очень велика, он будет потреблять много памяти
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let res = [arr[0]]
for (let i = 1; i < arr.length; i++) {
let flag = true
for (let j = 0; j < res.length; j++) {
if (arr[i] === res[j]) {
flag = false;
break
}
}
if (flag) {
res.push(arr[i])
}
}
return res
}
Метод indexOf для дедупликации 1
Метод indexOf() массива возвращает первое вхождение указанного элемента в массиве. Этот метод сначала определяет пустой массив res, а затем вызывает метод indexOf для обхода и оценки исходного массива.Если элемент не находится в res, поместите его в res и, наконец, верните res, чтобы получить дедуплицированный массив.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let res = []
for (let i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i])
}
}
return res
}
Метод indexOf для дедупликации 2
Используйте indexOf, чтобы определить, равно ли первое вхождение элемента в массиве текущей позиции элемента, если нет, это означает, что элемент является повторяющимся элементом.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
return Array.prototype.filter.call(arr, function(item, index){
return arr.indexOf(item) === index;
});
}
Дедупликация соседних элементов
Этот метод сначала вызывает метод сортировки sort() массива, а затем обходит и сравнивает соседние элементы в соответствии с отсортированными результатами.Если они равны, пропустить изменение элементов до конца обхода.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
arr = arr.sort()
let res = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
res.push(arr[i])
}
}
return res
}
Используйте свойства объекта для дедупликации
Создайте пустой объект, просмотрите массив, установите значение в массиве в качестве атрибута объекта и присвойте атрибуту начальное значение 1. Каждый раз, когда это происходит, соответствующее значение атрибута увеличивается на 1. Таким образом, значение атрибута соответствует числу появлений элемента.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let res = [],
obj = {}
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
res.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
return res
}
установить и деструктурировать назначение, чтобы удалить дублирование
Набор типов данных был добавлен в ES6.Одной из самых больших особенностей набора является то, что данные не повторяются. Функция Set может принимать массив (или подобный массиву объект) в качестве параметра для инициализации, и эту функцию также можно использовать для дедупликации массива.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
return [...new Set(arr)]
}
Array.from и установить дедупликацию
Метод Array.from может преобразовать структуру Set в результат массива, и мы знаем, что результат набора представляет собой неповторяющийся набор данных, поэтому он может достичь цели дедупликации.
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
return Array.from(new Set(arr))
}
Суммировать
Дедупликация массива — горячая проблема, с которой часто сталкиваются при разработке. Мы можем выбрать различные реализации в соответствии с различными сценариями применения.