返回

数组去重小课堂:揭秘常用与不常用去重方法

前端

前言

数组去重是前端开发中经常遇到的问题,也是算法面试中的常见题型。本文将详细介绍数组去重的常用方法和一些不常见的技巧,帮助您全面掌握数组去重的各种解法。

常规问题

假设我们有一个数组 arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'],如何快速从中去除重复元素,得到一个不包含重复元素的新数组?

常规方法

  1. 使用 Set 数据结构

    Set 数据结构可以自动去除重复元素,因此我们可以将数组中的元素插入到 Set 中,然后再将其转换为数组。这种方法简单易懂,但需要浏览器支持 Set 数据结构。

    const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'];
    const uniqueArr = [...new Set(arr)];
    
    console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
    
  2. 使用 indexOflastIndexOf 方法

    我们可以使用 indexOflastIndexOf 方法来查找数组中元素的第一次出现和最后一次出现的位置。如果元素的第一次出现和最后一次出现的位置相同,则说明该元素没有重复。

    const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'];
    const uniqueArr = [];
    
    for (let i = 0; i < arr.length; i++) {
      if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) {
        uniqueArr.push(arr[i]);
      }
    }
    
    console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
    
  3. 使用 filter 方法

    我们可以使用 filter 方法来过滤掉数组中的重复元素。

    const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'];
    const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
    
    console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
    

不常见的技巧

  1. 使用 reduce 方法

    我们可以使用 reduce 方法来将数组中的元素聚合为一个不包含重复元素的新数组。

    const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'];
    const uniqueArr = arr.reduce((acc, item) => {
      if (!acc.includes(item)) {
        acc.push(item);
      }
      return acc;
    }, []);
    
    console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
    
  2. 使用 Object.keys() 方法

    我们可以使用 Object.keys() 方法来获取一个对象的所有键名,而这些键名就是数组中不重复的元素。

    const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou'];
    const uniqueArr = Object.keys(arr.reduce((acc, item) => {
      acc[item] = true;
      return acc;
    }, {}));
    
    console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
    

总结

本文介绍了数组去重的多种方法,包括常规方法和一些不常见的技巧。希望这些方法能够帮助您更好地理解和掌握数组去重。如果您有更好的解法,欢迎在评论区分享。