数组去重的多种常见方案

一丶filter()+ indexOf( ) 去重

  • 思路:主要是利用filter()方法过滤掉重复的元素

     function unique(arr) {
     //过滤掉原数组中重复的数字,返回新的数组
     return arr.filter((item, index)=> {
      //遍历出数组中数字第一次出现的下标,与数字所在      数组的下标相比较,
       //为true就是第一次出现
       return arr.indexOf(item) === index
       })
     }
     let arr =[1,5,2,3,4,2,3,1,3,4]
     console.log(unique(arr))
     //打印的是 [1, 5, 2, 3, 4]
    

二丶push() + indexOf()实现去重

  • 思路:主要是利用indexOf()方法判断传入的数组值的是否在新数组存在,不存在就把传值push到新数组

     function unique(arr){
        //新建一个空数组
        let newArr = [];
        for(var i = 0; i < arr.length; i++ ){
            //遍历传入的数组,查找传入数组的值是否存在新数组中
             if(newArr.indexOf(arr[i]) === -1){
                 //不存在就把值push到新数组
                newArr.push(arr[i]);
             }
        }
        //返回新的数组
        return newArr;
    }
    let a = [1,5,2,3,4,2,3,1,3,4];
    console.log(unique(a));
    /打印的是 [1, 5, 2, 3, 4]
    

三丶双重for循环 + splice() 或 双重for循环 + push()实现去重

  • 思路:利用双重for循环找出重复的元素,然后在使用splice()方法删除重复的一个

     function unique(arr) {
        //遍历数组中所有的元素
        for(var i = 0,len = arr.length; i < len; i++){
            for(var v = i + 1; v < len; v++){
                //检查是否有重复的元素
                if(arr[i] === arr[v]){
                    //有,就从数组中去除
                    arr.splice(v,1);
                    // splice方法会改变数组长度,所以要将数组长度 len 和下标 v 减一
                    len--;
                    v--;
                }
            }
        }
        return arr
    }
    let a = [1,5,2,3,4,2,3,1,3,4];
    console.log(unique(a));
    //打印 [1, 5, 2, 3, 4]
    
  • 此方法特别浪费性能

四丶Set实现数组去重

  • ES6 提供了新的数据结构 Set
  • 它类似于数组,但是成员的值都是唯一的,没有重复的值(set本身是一个构造函数,用来生成 Set 数据结构)
第一种数组去重方法(使用Array.from):
let arr = [1,5,2,3,4,2,3,1,3,4];
let item = new Set(arr);
console.log(item);//结果输出的是一个对象
 //打印的是 [1, 5, 2, 3, 4]

//使用Array.from转成数组

let arr = [1,5,2,3,4,2,3,1,3,4];
let item = Array.from(new Set(arr));
console.log(item);
 //打印的是 [1, 5, 2, 3, 4]
第二种数组去重方法(使用...扩展运算符):
 let arr = [1,5,2,3,4,2,3,1,3,4];
 let item = [...new Set(arr)];
 console.log(item);//[1, 5, 2, 3, 4]
  • 优点:set集合去重是比较方便的,不需要自己再编写算法比对
  • 缺点:不兼容个别浏览器
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容