首页 > 代码库 > 数组去重的几种方式

数组去重的几种方式

一、利用indexOf查找,ie9以下不兼容

function noRepeat(ary) {
    if (ary instanceof Array) {
        var newAry = [];
        for (var i = 0; i < ary.length; i++) {
            var cur = ary[i];
            if (newAry.indexOf(cur) === -1) {//indexOf IE9以下不兼容
                newAry.push(cur)
            }
        }
        return newAry;
    }

}

二、利用对象属性名不能重复的方法。(不适合引号包裹的数字

1.用了声明了一个新的数组和一个新的对象。

    function noRepeat(ary){
        if(ary instanceof Array){
            var newAry = [];
            var obj ={};
//            不适合区分数组项是字符型的数字,例如:5与‘5‘,
            for(var i = 0; i < ary.length; i++ ){
                var cur = ary[i];
                obj[cur] = cur;
            }
            //把对象的属性名放到新数组中
            for(var key in obj){
                newAry.push(obj[key]);
            }
            return newAry;
        }

    }

2.for in

    function noRepeat(ary) {
        if (ary instanceof Array) {
            var obj = {};
            for (var i = 0; i < ary.length; i++) {
                var cur = ary[i];
                obj[cur] = cur;/
            }
            //再用一个数组存储下
            var ary2 = [];
            for (var key in obj) {
                ary2.push(obj[key])
            }
            return ary2;

        }

    }

3.只声明一个对象方式,利用splice删除重复项

    function noRepeat(ary){
        if(ary instanceof Array){
            var obj = {};
            for(var i = 0; i < ary.length; ){
                var cur = ary[i];
                if(obj[cur] == cur){
                    ary.splice(i,1);
//删除重复项后,i值不变但数组塌陷自定取到后面的一项。i<ary.length是动态计算的不会出错。

                }else{
                    obj[cur] = cur;
                    i++;
                }

            }
            return ary;

        }

    }

数组去重的几种方式