數組去重

let array = [1,2,3,3,4,2,4,5];

方法一(通過indexOf,返回該數組下表)

        Array.prototype.unique = function()
        {
            var n = [this[0]]; //結果數組
            for(var i = 1; i < this.length; i++) //從第二項開始遍歷
            {
            //  //如果當前數組的第i項在當前數組中第一次出現的位置不是i,
            //  //那么表示第i項是重復的,忽略掉。否則存入結果數組
                if (this.indexOf(this[i]) == i) n.push(this[i]);
                console.log(this.indexOf(this[i]),i);
            }
            return n;
        }
調用
    array.unique()

方法二(通過sort從小到大排序,然后遍歷數組比較相鄰元素是否相等)

    Array.prototype.unique = function()
        {
            this.sort();
            var re=[this[0]];
            for(var i = 1; i < this.length; i++)
            {
                if( this[i] !== re[re.length-1])
                {
                    re.push(this[i]);
                }
            }
            return re;
        }
        調用
        array.unique();

方法三(通過哈希表)

        Array.prototype.unique = function()
        {
            var n = {},r=[]; //n為hash表,r為臨時數組
            for(var i = 0; i < this.length; i++) //遍歷當前數組
            {
                console.log(n[this[i]])
                if (!n[this[i]]) //如果hash表中沒有當前項
                {
                    n[this[i]] = true; //存入hash表
                    r.push(this[i]); //把當前數組的當前項push到臨時數組里面
                }
            }
            return r;
        }
        array.unique()

散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表


方法四(類似于方法一)
方法一是假設當前元素的下標是否是重復的
方法四是判斷有沒有這個下標,沒有返回-1;

        Array.prototype.unique = function()
        {
            var n = []; //一個新的臨時數組
            for(var i = 0; i < this.length; i++) //遍歷當前數組
            {
                //如果當前數組的第i已經保存進了臨時數組,那么跳過,
                //否則把當前項push到臨時數組里面
                console.log(n.indexOf(this[i]),n);
                if (n.indexOf(this[i]) == -1) n.push(this[i]);
            }
            return n;
        }
        array.unique()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.遍歷數組法 最簡單的去重方法, 實現思路:新建一新數組,遍歷傳入數組,值不在新數組就加入該新數組中;注意點:判...
    LuckyS007閱讀 548評論 0 3
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 數組去重的多種方法 遍歷數組法 實現思路:新建一新數組,遍歷傳入數組,值不在新數組就加入該新數組中;注意點:判斷值...
    啾啾噠閱讀 1,236評論 0 0
  • 數組去重方式 快速排序
    black白先森閱讀 210評論 0 0
  • 你的手 放在我的肩上 安心睡去 我因此不能入睡 嬌小的身軀也抵擋不住黑夜的漫長 變得厚重 但你的姿態毫不改變 這只...
    南途丶閱讀 163評論 0 0