數組去重

一.es6數組去重(高性能)

1.利用Set結構和...擴展運算符es6

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            // Set結構的成員都是惟一的,Set函數能夠接受一個數組做爲參數,用來初始化(高性能)
            let set = [...new Set(arr)]
} unique(arr) }

2.利用Set結構和Array.from數組

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            // 利用Array.from將set結構轉化成真正的數組
            let set = Array.from(new Set(arr))
        }

        unique(arr)
    }

3.利用 Array.filter()方法的過濾方法,將數組進行過濾,篩選條件是數組下標與檢索下標一致。函數

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            let set = arr.filter((item,index) =>{
            return arr.indexOf(item) === index       
        }

        unique(arr)
    }

二.哈希表思想(最高性能)

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            // 新建一個結果數組、一個存儲標誌的對象hash,遍歷數組,對象中arr[i]對應的值爲ture的時候不重複添加;
            var result = [] ,
                hash = {} ;  // 定義新數組result 和hash.
            for ( let elem of arr )  {  //  遍歷前四個數時,hash表中沒有這四個值,因此if語句成立,將數據push到result中,令這些表中的數都爲true。
                    if ( ! hash [ elem ] )  { //  當遍歷到第二個1的時候,以前已經令hash [ elem ]  = true , 因此if語句就不執行了,就不會重複了
                           result.push ( elem );
                        hash [ elem ] = true; // 做爲一個是否在數組中存在的標誌
                    }
            }
                    console.log(result)  //[1, 2, 3, 4, 5, 6, 7]
        }

        unique(arr)
    }

三.用一個空數組去存首次出現(indexOf)的元素

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            let set = []
            for(let x of arr) {
                if (set.indexOf(x) === -1) {
                    set.push(x)
                }
            }
            console.log(set) //[1, 2, 3, 4, 5, 6, 7]     
        }

        unique(arr)
    }

四.includes() 方法用來判斷一個數組是否包含一個指定的值,根據狀況,若是包含則返回 true,不然返回false。

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            let set = []
            for(let x of arr) {
                if (!set.includes(x)) {
                    set.push(x)
                }
            }
            console.log(set) //[1, 2, 3, 4, 5, 6, 7]     
        }

        unique(arr)
    }

五.利用sort()方法

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            //先給數組排序,循環比較先後兩個是否相等,若是相等就刪除索引是i的這個,而後i--
            arr = arr.sort();
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] === arr[i+1]) {
                       arr.splice(i,1);
                    i--;
                }
            }
            console.log(arr) //[1, 2, 3, 4, 5, 6, 7]     
        }

        unique(arr)
    }

六.嵌套for循環,循環比較當前值和後面的值是否相等,若是相等就刪除索引是j的這個,而後j--

window.onload = function(){
        var arr = [1,2,3,4,4,5,6,7,3,3,3]
        function unique(arr) {
            for (let i = 0; i < arr.length; i++) {
                for (let j = i+1; j < arr.length; j++) {
                    if (arr[i] === arr[j]) {
                        arr.splice(j,1);
                        j--
                    }
                }
            }
            console.log(arr) //[1, 2, 3, 4, 5, 6, 7]     
        }

        unique(arr)
    }
相關文章
相關標籤/搜索