多种js数组去重的方法

2016-06-14  本文已影响182人  Top_Chenxi
require(['jquery'], function($) {

    // 数组去重

    // 获取数组
    function getArray(length) {
        var tmpArray = [];
        for (var i = 0; i < length; i++) {
            tmpArray.push(Math.floor(Math.random() * 10 + 1));
        }
        return tmpArray;
    }


    /*
        开始介绍下jquery的去重方法,简单粗暴
    */

    var myArray = getArray(20);

    console.log("排序前:", myArray);

    console.log("排序后:", $.unique(myArray));

    /*
        方法一(慢到没朋友)

        1.构建一个新的数组存放结果

        2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比

        3.若结果数组中没有该元素,则存到结果数组中

    */
    function unique_method1(array) {
        var tmpArray = [array[0]];
        for (var i = 1, len = array.length; i < len; i++) {
            var flag = false;
            for (var j = 0, tmpLen = tmpArray.length; j < tmpLen; j++) {
                if (array[i] == tmpArray[j]) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                tmpArray.push(array[i])
            }
        }
        return tmpArray;
    }
    var myArray = getArray(20);

    console.log("排序前:", myArray);

    console.log("排序后:", unique_method1(myArray));

    /*
            方法二:(高效)

            1.创建一个新的数组存放结果,创建一个空对象来记录存放

            2.for循环时,每次取出一个元素与记录存放进行对比,如果这个元素不重复,
              则把它存放到结果数组中,并在对象中记录下来。
    */

    function unique_method2(array) {
        var tmpArray = [];
        var tmpObj = {};
        for (var i = 0, len = array.length; i < len; i++) {
            if (!tmpObj[array[i]]) {
                tmpArray.push(array[i]);
                tmpObj[array[i]] = 1;
            }
        }
        return tmpArray;
    }

    var myArray = getArray(20);

    console.log("排序前:", myArray);

    console.log("排序后:", unique_method2(myArray));

    /*
            方法三(高效,但改变顺序)

            1.先将原数组进行排序

            2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,
              因为已经排序,所以重复元素会在相邻位置

            3.如果不相同,则将该元素存入结果数组中
    */

    function unique_method3(array) {
        array.sort();
        var tmpArray = [array[0]];
        for (var i = 1, len = array.length; i < len; i++) {
            if (array[i] !== tmpArray[tmpArray.length - 1]) {
                tmpArray.push(array[i]);
            }
        }
        return tmpArray;
    }

    var myArray = getArray(20);

    console.log("排序前:", myArray);

    console.log("排序后:", unique_method3(myArray));



})
上一篇下一篇

猜你喜欢

热点阅读