zoukankan      html  css  js  c++  java
  • JS 数组去重的几种方式

    JS 常见的几种数组去重方法

      一、最简单方法(indexOf 方法)

       实现思路:新建一个数组,遍历要去重的数组,当值不在新数组的时候(indexOf 为 -1)就加入该新数组中;

    function unique(arr){
        var newArr = [];
        for(var i = 0; i < arr.length; i++){
            if(newArr.indexOf(arr[i]) == -1){
                newArr.push(arr[i])
            }
        }
        return newArr;
    }       
    
    var arr = [1,2,2,3,4,4,5,1,3];
    var newArr = unique(arr);
    console.log(newArr);

      二、优化遍历数组法

       实现思路:双层循环,外循环表示从0到arr.length,内循环表示从i+1到arr.length,

              将没重复的右边值放入新数组。(检测到有重复值时终止当前循环同时进入外层循环的下一轮判断)

    function unique(arr){
        var newArr = [];
        for(var i = 0; i < arr.length; i++){
            for(var j = i+1; j < arr.length; j++){
                if(arr[i] == arr[j]){
                    ++i;
                }
            }
            newArr.push(arr[i]);
        }
        return newArr;
    }
    var arr = [1,2,2,3,5,3,6,5];
    var newArr = unique(arr);
    console.log(newArr);

      三、利用对象的属性不能相同的特点进行去重(推荐使用)

       实现思路:

        1.创建一个新的数组存放结果

        2.创建一个空对象

        3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

        说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

    function unique(arr){
        var res = [];
        var obj = {};
        for(var i=0; i<arr.length; i++){
           if( !obj[arr[i]] ){
                obj[arr[i]] = 1;
                res.push(arr[i]);
            }
        } 
     return res;
    }
    var arr = [1,2,2,3,5,3,6,5];
    var res = unique(arr)
    console.log(res );

      四、ES6 数组去重

       实现思路:

        利用 ES6的set 方法。

    function unique(arr){
     //Set数据结构,它类似于数组,其成员的值都是唯一的
     return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
    }
    
    var arr = [1,2,2,3,5,3,6,5];
    var res = unique(arr)
    console.log(res );
    随笔参考 https://www.jb51.net/article/121410.htm
    感谢博主分享!
  • 相关阅读:
    MongoDB学习(附录一) 安装mongodb3.6时碰到的问题
    详细图解mongodb下载、安装、配置与使用
    大数据时代的数据存储,非关系型数据库MongoDB
    python获取风和天气城市数据 ID
    智能车学习(二十一)——浅谈CCD交叉以及横线摆放
    智能车学习(二十)——浅谈C车硬连接与软连接
    智能车学习(十九)——硬件电路设计
    智能车学习(十八)——电机学习
    智能车学习(十七)——舵机学习
    智能车学习(十六)——CCD学习
  • 原文地址:https://www.cnblogs.com/gaosirs/p/10677221.html
Copyright © 2011-2022 走看看