数组去重

/*
        * 最基本的去重方法
        * 思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
        */
        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)];

 

posted @ 2019-03-21 17:21  江离白芷  阅读(183)  评论(0编辑  收藏  举报