前端JavaScript

数组去重(两种方法)

2020-03-26  本文已影响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);
上一篇下一篇

猜你喜欢

热点阅读