數組去重

/*
        * 最基本的去重方法
        * 思路:定義一個新數組,並存放原數組的第一個元素,而後將元素組一一和新數組的元素對比,若不一樣則存放在新數組中。
        */
        function unique(arr) {
            var resArr = [arr[0]];
            for (var i = 1; i < arr.length; i++) {
                var repeat = false;
                for (var j = 0; j < resArr.length; j++) {
                    if (arr[i] == resArr[j]) { 
                        repeat = true;
                        break;
                    }
                }
                !repeat && resArr.push(arr[i]);
            }
            return resArr;
        }
/*
        * 利用對象的屬性去重(推薦)
        * 思路:每次取出原數組的元素,而後在對象中訪問這個屬性,若是存在就說明重複
        */
        function unique(arr) {
            var resArr = [];
            var json = {};
            for (var i = 0; i < arr.length; i++) {
                if (!json[arr[i]]) {
                    resArr.push(arr[i]);
                    json[arr[i]] = 1;
                }
            }
            console.log(json);
            return resArr;
        }
/*
        * 利用下標查詢
        * 新建一新數組,遍歷傳入數組,值不在新數組就push進該新數組中
        * IE8及其如下版本不支持數組的indexOf方法
        */
        function unique(array) {
            var temp = [];
            for (var i = 0; i < array.length; i++) {
                ( temp.indexOf(array[i]) == -1 ) && temp.push(array[i]);
            }
            return temp;
        }
/*
        * 排序後相鄰去除法
        * 給傳入數組排序,排序後相同值相鄰,
        * 而後遍歷時,新數組只加入不與前一值重複的值。
        * 會打亂原來數組的順序
        */
        function unique(array) {
            array.sort();    //數組在原數組上進行排序,不生成副本
            var temp = [ array[0] ];
            for (var i = 0; i < array.length; i++) {
                ( array[i] !== temp[temp.length - 1] ) && temp.push(array[i]);
            }
            return temp;
        }
/*
        * 實現思路:若是當前數組的第i項在當前數組中第一次出現的位置不是i,
        * 那麼表示第i項是重複的,忽略掉。不然存入結果數組。
        * array.indexOf(item,start)方法可返回數組中某個指定的元素位置
        */
        function unique(array) {
            var temp = [];
            for (var i = 0; i < array.length; i++) {
                ( array.indexOf(array[i]) == i ) && temp.push(array[i]);
            }
            return temp;
        }
// ES6
        let arr = [1,2,1,4,2,6,1,5];
        let s = new Set(arr);
        let res = [...new Set(arr)];
相關文章
相關標籤/搜索