数组去重

61 阅读1分钟

今天发现以前写的数组去重方法有问题,删了 新的,这个应该没问题吧

var arr4 = [2, 5, 1, 1, 1, 1, 1, 5, 2, 1];
var arr = {
    unique: function (arr) {
        var res = [];
        for (var i in arr) {
            if (!res.length || this.compare(arr[i], res)) {
                res.push(arr[i]);
            }
        }
        return res;

    },
    compare: function (k, arr) {
        for (var i in arr) {
            if (arr[i] == k) {
                return false;
            }
        }
        return true;
    }
}
console.log(arr.unique(arr4));
var dedupArr = function (a) {
    var newArr = [];
    for (var i = 0, len = a.length; i < len; i++) {
        for (var j = i + 1; j < len; j++) {
            if (a[i] == a[j]) {
                j = ++i;
            }
        }
        newArr.push(a[i])
    }
    return newArr;
}
var arr = [1, 1, 1, 12, 2, 2, 5, 5, 5, 6, 6, 1, 2]
alert(dedupArr(arr))

也可以这样

function unique(arr){
//和第一种类似
var res=[];
for(var i=0,len=arr.length;i<len;i++){
    if(res.indexOf(arr[i])<0){
    res.push(arr[i])
    }
}
return res;
}

这种对于类型不一样去重不了,如1和“1”,并且ES5数组才有indexOf()方法

unique([1,1,1,1,"1",22,2,2,2,5,5,6,])
[1, "1", 22, 2, 5, 6]

我们可以新增一个变量来判断,新的数组里面是否有某个值

function unique(arr){
var tempobj ={},res=[];
for(var i=0,len=arr.length;i<len;i++){
    if(!tempobj[arr[i]]){
    tempobj[arr[i]]=true;    
    res.push(arr[i]);
    }
}
return res;
}
unique([1,1,1,1,"1",22,2,2,2,5,5,6,])
[1, 22, 2, 5, 6]

平常写代码觉得能少用一个变量就少用一个,对于第三种多了一个变量的确一下子简单不少。