• 数组去重


    一.es6数组去重(高性能)

    1.利用Set结构和...扩展运算符

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                // Set结构的成员都是唯一的,Set函数可以接受一个数组作为参数,用来初始化(高性能)
                let set = [...new Set(arr)]
    } unique(arr) }

    2.利用Set结构和Array.from

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                // 利用Array.from将set结构转化成真正的数组
                let set = Array.from(new Set(arr))
            }
    
            unique(arr)
        }

    3.利用 Array.filter()方法的过滤方法,将数组进行过滤,筛选条件是数组下标与检索下标一致。

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                let set = arr.filter((item,index) =>{
                return arr.indexOf(item) === index       
            }
    
            unique(arr)
        }

    二.哈希表思想(最高性能)

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                // 新建一个结果数组、一个存储标志的对象hash,遍历数组,对象中arr[i]对应的值为ture的时候不重复添加;
                var result = [] ,
                    hash = {} ;  // 定义新数组result 和hash.
                for ( let elem of arr )  {  //  遍历前四个数时,hash表中没有这四个值,所以if语句成立,将数据push到result中,令这些表中的数都为true。
                        if ( ! hash [ elem ] )  { //  当遍历到第二个1的时候,之前已经令hash [ elem ]  = true , 所以if语句就不执行了,就不会重复了
                               result.push ( elem );
                            hash [ elem ] = true; // 作为一个是否在数组中存在的标志
                        }
                }
                        console.log(result)  //[1, 2, 3, 4, 5, 6, 7]
            }
    
            unique(arr)
        }

    三.用一个空数组去存首次出现(indexOf)的元素

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                let set = []
                for(let x of arr) {
                    if (set.indexOf(x) === -1) {
                        set.push(x)
                    }
                }
                console.log(set) //[1, 2, 3, 4, 5, 6, 7]     
            }
    
            unique(arr)
        }

    四.includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                let set = []
                for(let x of arr) {
                    if (!set.includes(x)) {
                        set.push(x)
                    }
                }
                console.log(set) //[1, 2, 3, 4, 5, 6, 7]     
            }
    
            unique(arr)
        }

    五.利用sort()方法

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            function unique(arr) {
                //先给数组排序,循环比较前后两个是否相等,如果相等就删除索引是i的这个,然后i--
                arr = arr.sort();
                for (let i = 0; i < arr.length; i++) {
                    if (arr[i] === arr[i+1]) {
                           arr.splice(i,1);
                        i--;
                    }
                }
                console.log(arr) //[1, 2, 3, 4, 5, 6, 7]     
            }
    
            unique(arr)
        }

    六.嵌套for循环,循环比较当前值和后面的值是否相等,如果相等就删除索引是j的这个,然后j--

    window.onload = function(){
            var arr = [1,2,3,4,4,5,6,7,3,3,3]
            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--
                        }
                    }
                }
                console.log(arr) //[1, 2, 3, 4, 5, 6, 7]     
            }
    
            unique(arr)
        }
  • 相关阅读:
    Java 8 stream的详细用法
    SpringBoot启动异常 Process finished with exit code 1
    GIT-版本管理-初阶使用
    升级 kubeadm 集群
    antdv 获取 axios文件上传实时进度
    Ant Design Vue 实现文件上传 (通过点击提交按钮后开始上传)
    Ant Design Vue 实现菜单栏根据url变化自动高亮和展开
    Do not access Object.prototype method 'hasOwnProperty' from target object
    Nginx配置WebSocket (包含nginx-ingress-controller)
    Django ORM 常用字段和参数/关系字段/ForeignKey操作/数据库查询优化(重要)/事务初识
  • 原文地址:https://www.cnblogs.com/ruilin/p/11511333.html
Copyright © 2020-2023  润新知