7 способов добиться дедупликации массива

внешний интерфейс JavaScript

предисловие

Дедупликация — горячая проблема, с которой часто сталкиваются при разработке, но текущая ситуация в проекте такова, что фоновый интерфейс использует 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))
}

Суммировать

Дедупликация массива — горячая проблема, с которой часто сталкиваются при разработке. Мы можем выбрать различные реализации в соответствии с различными сценариями применения.