JS数组去重的七种方法

1,276 阅读3分钟

数组去重的七种方法

1. 利用 ES6 的 Set 结构

  • 原理:Set 数据结构的特点是成员值唯一,即不会有重复的值,所以可以利用这一特性来快速实现数组去重。

  • 示例代码(JavaScript)

收起

javascript

复制

const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); 
// [1, 2, 3, 4]

2. 双层 for 循环(暴力去重法)

  • 原理:通过外层循环遍历数组,内层循环对比当前元素与后面元素是否相同,若相同则删除内层循环对应的重复元素。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]

不过这种方法在处理大型数组时性能较差,因为涉及大量的循环比较以及数组元素的删除操作,会有较高的时间复杂度。

3. 利用 indexOf () 方法

  • 原理:通过遍历数组,对于每个元素,检查它在新数组中的 indexOf 值是否等于当前索引,如果相等说明是首次出现该元素,将其添加到新数组中,否则就是重复元素,不予添加。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    const result = [];
    for (let i = 0; i < arr.length; i++) {
        if (result.indexOf(arr[i]) === -1) {
            result.push(arr[i]);
        }
    }
    return result;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]

4. 利用 includes () 方法

  • 原理:类似 indexOf 方法的思路,只不过是用 includes 来判断新数组是否已经包含当前元素,若不包含则添加进去,从而实现去重。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    const result = [];
    for (let i = 0; i < arr.length; i++) {
        if (!result.includes(arr[i])) {
            result.push(arr[i]);
        }
    }
    return result;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]

5. 利用对象的属性唯一性(键值对形式)

  • 原理:把数组元素作为对象的属性名,由于对象的属性名是唯一的,所以可以利用这个特性来进行去重。当遍历数组时,每次将元素作为属性名添加到对象中,最后提取对象的属性名转换回数组即可。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    const obj = {};
    const result = [];
    for (const element of arr) {
        if (!obj[element]) {
            obj[element] = true;
            result.push(element);
        }
    }
    return result;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]

6. 利用 Map 数据结构

  • 原理:Map 数据结构保存键值对,并且键是唯一的,与利用对象去重的思路类似,把数组元素作为 Map 的键,通过遍历数组将元素存入 Map 中,最后获取 Map 的键来构成去重后的数组。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    const map = new Map();
    const result = [];
    for (const element of arr) {
        if (!map.has(element)) {
            map.set(element, true);
            result.push(element);
        }
    }
    return result;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]

7. 利用排序后相邻元素对比法

  • 原理:先对数组进行排序,这样重复的元素就会相邻,然后遍历排序后的数组,对比相邻元素是否相同,若不同则将元素添加到新数组中,以此实现去重。

  • 示例代码(JavaScript)

收起

javascript

复制

function unique(arr) {
    arr.sort((a, b) => a - b);
    const result = [arr[0]];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i]!== arr[i - 1]) {
            result.push(arr[i]);
        }
    }
    return result;
}
const arr = [1, 2, 2, 3, 3, 4];
const uniqueArr = unique(arr);
console.log(uniqueArr);
// [1, 2, 3, 4]