数组去重

278 阅读2分钟
   class Uniqe {
    /**
    @method 使用es6set方法去重
    @problem {}没有去重,undefined和NaN去掉
    **/
    uniqueOne(arr) {
        let list = JSON.parse(JSON.stringify(arr))
        return Array.from(new Set(list))
    }

    /**
    @method 双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值
    @problem {}没有去重,undefined和NaN去掉
    **/
    uniqueTwo(arr) {
        let list = JSON.parse(JSON.stringify(arr))
        for (let i = 0; i < list.length; i++) {
            for (let j = i + 1; j < list.length; j++) {
                //第一个等同于第二个,splice方法删除第二个
                if (list[i] === list[j]) {
                    list.splice(j, 1);
                    j--;
                }
            }
        }
        return list;
    }

    /**
    @method 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组
    @problem NaN、{}没有去重
    **/
    uniqueThree(arr) {
        let array = [];
        arr.forEach(item => {
            if (array.indexOf(item) === -1) {
                array.push(item)
            }
        })
        return array;
    }

    /**
    @method sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对
    @problem {}没有去重,undefined和NaN去掉
    **/
    uniqueFour(arr) {
        // if (!Array.isArray(arr)) {
        //     console.log('type error!')
        //     return;
        // }
        let list = JSON.parse(JSON.stringify(arr))
        list = list.sort()
        var arrry = [list[0]];
        for (var i = 1; i < list.length; i++) {
            if (list[i] !== list[i - 1]) {
                arrry.push(list[i]);
            }
        }
        return arrry;
    }

    /**
    @method 利用filter
    @problem {}没有去重,undefined和NaN去掉
    **/
    uniqueFive(arr) {
        let list = JSON.parse(JSON.stringify(arr))
        return list.filter(function(item, index, arr) {
            //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
            return list.indexOf(item, 0) === index;
        });
    }

    /**
    @method 利用Map数据结构去重
    @problem {}没有去重
    **/
    uniqueSix(arr) {
        let map = new Map();
        let array = new Array(); // 数组用于返回结果
        for (let i = 0; i < arr.length; i++) {
            if (map.has(arr[i])) { // 如果有该key值
                map.set(arr[i], true);
            } else {
                map.set(arr[i], false); // 如果没有该key值
                array.push(arr[i]);
            }
        }
        return array;
    }

    /**
    @method 依据对象的属性不能相同的特点进行去重
    @problem true去掉了
    **/
    uniqueSeven(arr) {
        var arrry = [];
        var obj = {};
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]);
            console.log(obj[arr[i]]);
            if (!obj[arr[i]]) {
                arrry.push(arr[i])
                obj[arr[i]] = 1
            } else {
                obj[arr[i]]++
            }
        }
        return arrry;
    }
}
const arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
let uniqe = new Uniqe()
let arrOne = uniqe.uniqueOne(arr)
let arrTwo = uniqe.uniqueTwo(arr)
let arrThree = uniqe.uniqueThree(arr)
let arrFour = uniqe.uniqueFour(arr)
let arrFive = uniqe.uniqueFive(arr)
let arrSix = uniqe.uniqueSix(arr)
let arrSeven = uniqe.uniqueSeven(arr)
    // console.log(arrOne)
    // console.log(arrTwo)
    // console.log(arrThree)
    // console.log(arrFour);
console.log(arrFive);
console.log(arrSix);
console.log(arrSeven);