美文网首页前端JavaScript
数组去重(两种方法)

数组去重(两种方法)

作者: 晚月川 | 来源:发表于2020-03-26 12:27 被阅读0次

    数组去重(面向对象 && 链式写法)

    // 虽然内置类的原型上有很多的方法,但是不一定完全够项目开发所用,所以真实项目中,需要我们自己向内置类原型扩展方法,来实现更多的功能操作
    // 数组原型上有sort实现数组排序的方法,但是没有实现数组去重的方法,我们接下来向内置类原型扩展方法:myUnique,以后arr.myUnique执行可以把数组去重
    Array.prototype.myUnique = function myUnique() {
        // this:当前要操作的数组实例
        let obj = {};
        for(let i = 0; i < this.length; i++) {
            let item = this[i];
            if(typeof obj[item] !== "undefined"){
                // 当前项已经存在
                this[i] = this.length-1;
                this.length--;
                i--;
                continue;
            }
            obj[item] = item;
        }
        obj = null;
        // 为了实现链式写法
        return this;
    };
    let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
    // 链式写法:执行完上一个方法,紧接着调用下一个方法执行
    // arr之所以能调用myUnique或者sort等数组原型上的方法,是因为arr是Array的实例,所以链式写法的实现思路很简单,只需要让上一个方法执行的返回结果依然是当前类的实例,这样可以接着调用类原型上的其他方法了
    arr.myUnique().sort((a , b) => a - b);
    console.log(arr);
    
    
    /* let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
    arr.myUnique();
    arr.sort((a,b) => a - b);
    console.log(arr); */
    
    function unique(arr) {
        let obj = {};
        for(let i = 0; i < arr.length; i++) {
            let item = arr[i];
            if(typeof obj[item] !== "undefined"){
                // 当前项已经存在
                arr[i] = arr.length-1;
                arr.length--;
                i--;
                continue;
            }
            obj[item] = item;
        }
        return arr;
    }
    let arr = [10,22,11,10,13,51,15,23,14,17,57,95,27];
    arr = unique(arr);
    console.log(arr);
    

    相关文章

      网友评论

        本文标题:数组去重(两种方法)

        本文链接:https://www.haomeiwen.com/subject/vdaquhtx.html