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

相關文章
相關標籤/搜索