整理 javascript 去除数组中重复项的几种方法

来源:互联网 发布:java引用传递 编辑:程序博客网 时间:2024/06/11 19:32
<script>
    //方法一(说明:只限定数字,不支持字符)
    function regArrayA(arr) {
        var array = arr;
        var o = {};
        for (var i = 0; i < array.length; i++) {
            o[array[i]] = array[i];
        }
        array = [];
        for (var el in o) {
            if (el == o[el]) {
                array.push(el - 0);
            }
        }
        return array;
    }
    //方法二:(有BUG)
    function regArrayB(arr) {
        return arr.reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();
    }
    //方法三:
    function regArrayC(arr) {
        var obj = {}, temp = [];
        for (var i = 0; i < arr.length; i++) {
            if (!obj[arr[i]]) {
                temp.push(arr[i]);
                obj[arr[i]] = true;
            }
        }
        return temp;


    }
    //方法四:
    function regArrayD(arr) {
        var str = [];
        for (var i = 0; i < arr.length; i++) {
            !RegExp(arr[i], "g").test(str.join(",")) && (str.push(arr[i]));
        }
        return str;
    }
    //方法五
    function regArrayE(arr) {
        var o = {}, newArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (typeof (o[arr[i]]) == "undefined") {
                o[arr[i]] = "";
            }
        }
        for (var j in o) {
            newArr.push(j)
        }
        return newArr;
    }
    //方法六
    function regArrayF(arr) {
        var a = [], b = [];
        for (var prop in arr) {
            var d = arr[prop];
            if (d === a[prop]) continue; //防止循环到prototype
            if (b[d] != 1) {
                a.push(d);
                b[d] = 1;
            }
        }
        return a;
    }
    //方法七(支持不同的类型区分)
    function regArrayG(array) {
        var ret = [], record = {}, it, tmp, obj = "__object__", bak = [], i, len;
        var type = {
            "number": function (n) { return "__number__" + n; },
            "string": function (n) { return "__string__" + n; },
            "boolean": function (n) { return "__boolean__" + n; },
            "undefined": function (n) { return "__undefined__"; },
            "object": function (n) {
                return n === null ? "__null__" : obj in n ? n[obj] : (n[obj] = obj + bak.push(n));
            }
        };
        for (i = 0, len = array.length; i < len; i++) {
            it = array[i]; tmp = type[typeof it](it);
            if (!(tmp in record)) { ret.push(it); record[tmp] = true; }
        }
        for (i = 0, len = bak.length; i < len; delete bak[i++][obj]) { }
        return ret;
    };


    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 'a', 'b', 'c', 'a', 'b', -1, -2, -3, -2, -1, 0.1, 0.2, 0.3, 0.2, 0.1, '1', '2', '3', '3', '4'];


    alert("regArrayA:" + regArrayA(arr));
    alert("regArrayB:" + regArrayB(arr));
    alert("regArrayC:" + regArrayC(arr));
    alert("regArrayD:" + regArrayD(arr));
    alert("regArrayE:" + regArrayE(arr));
    alert("regArrayF:" + regArrayF(arr));
    alert("regArrayG:" + regArrayG(arr));
</script>
0 0