JavaScript数组去重咱们获得了什么

提及来数组去重,可能基本上每一个人都能写出来3中左右的方法,可是每个简单的方法,或者说每一种简单的方式,均可能是一个知识点,多看,多写,多用。数组

第一种:循环套循环去重
const sy1=Symbol();
const sy2=Symbol();
const arr1=[1,2,"a",3,'2',2,1,3,'a',undefined,null,NaN,null,undefined,NaN,sy1,sy2]
    Array.prototype.qcArray=function(){
        const _this=this;
        const newArr=[];
        for(let i=0;i<_this.length;i++){
            for(let t=i+1;t<_this.length;t++){
                if(this[i]===this[t]){
                    i++;
                    t=i;
                }
            }
            newArr.push(this[i])
        }
        return newArr
    }
    原理是利用双层循环,当第二层循环的时候好比i=0时,t=6的时候发现相等了,就跳过这个外层循环。
第二种:遍历数组,若是新数组中没有旧的数组,则添加进去
  Array.prototype.qsArr1=function(){
        const _this=this;
        const na=[];
        for(let i=0;i<_this.length;i++){
            if(na.indexOf(_this[i])<0){
                na.push(_this[i])
            }
        }
        return na
    }
第三种:使用ES6的新属性new Set(); 相似数组,成员的值惟一
     function qsArr2(arr) {
        return [...(new Set(arr))]
     }
第四种:对象的属性惟一
Array.prototype.qsArr2=function(){
    const _this=this,obj={},na=[];
    for(let v of _this){
        if(!obj[v]){
            na.push(v);
            obj[v]=1
        }
    }
    return na
}
从效率上讲,最后一种是最高的,Set()排行第二,循环遍历是最慢的
第五种:先排序在作处理,利用Array.sort();
 Array.prototype.qsArr3=function () {
        const nArr=this.sort();
        const na = [];
        for (let i = 0; i < nArr.length; i++) {
        if(nArr[i]!==nArr[i+1])
            na.push(nArr[i])
        }
        return na
}
复制代码

每一种方法都有本身的思想,理解了,就会在实际项目当中用到。 我获得了一个我认为重要的想法,解决问题是多样的,多思考。bash

相关文章
相关标签/搜索