Javascript的几种数组去重

最近在做笔试题,遇到很多情况都需要进行去重操作,比如说数组去重,数组中的对象去重,对象中的数组去重以及字符串去重等。现在我来进行一下总结。

一、数组去重

1.代码

第一种方法

var arr = [1,4,"test",2,"arr",2,,"测试",4,"测试",2,"test","arr"];
var obj = {};
var newArr = [];
for(var i=0;i
    obj[arr[i]] ? "" : obj[arr[i]]=true&&newArr.push(arr[i]);
}
console.log("newArr",newArr);

查看结果数组中是否存在当前值,不存在就添加到结果数组中。
速度是四个中第二快得,推荐使用。

第二种方法

var arr = [1,4,"test",2,"arr",2,,"测试",4,"测试",2,"test","arr"];
var obj = {};
var newArr = [];
for(var i=0;i
    (newArr.indexOf(arr[i])==-1)? newArr.push(arr[i])  : "";
}
console.log("newArr",newArr);

应用数组的indexOf方法,原理同上。但indexOf的兼容性还是有问题,IE9部分支持,IE9以下都不支持,而且速度在四种方法中处于第三。不建议使用。
Javascript的几种数组去重_第1张图片

第三种方法

var arr = [1,4,"test",2,"arr",2,,"测试",4,"测试",2,"test","arr"];
var obj = {};
var newArr = [];
arr.sort();
newArr.push(arr[0]);
for(var i=1;i
    if(arr[i]!=newArr[newArr.length-1]){
        newArr.push(arr[i]);
    }
}
console.log("newArr",newArr);

调用了sort方法,对于原数组进行了修改,如果遇到对于那些原数组不能变动的要求时,这个方法就不能用了,速度处于第四。

第四种方法

var arr = [1,4,"test",2,"arr",2,,"测试",4,"测试",2,"test","arr"];
var obj = {};
var newArr = [];
for(var i=arr.length-1;i>=0;i--){
    (arr[i] in obj) ? arr.splice(i,1):obj[arr[i]] = true;
}
console.log("newArr",arr);

应用in迭代出对象的属性,速度是四个中最快的。

2.结果展示

Javascript的几种数组去重_第2张图片

二、数组中的对象去重

1.代码

var arr2 = [{
    "id": "1",
    "name": "David",
    "age": 20
}, {
    "id": "2",
    "name": "Tony",
    "age": 22
}, {
    "id": "3",
    "name": "Bob",
    "age": 18
}, {
    "id": "4",
    "name": "Tony",
    "age": 22
}, {
    "id": "5",
    "name": "Lily",
    "age": 20
}];
var obj2 = {};
var newArr2 = arr2.reduce(function(item,obj){
    if(!obj2[obj.name]){
        if(!obj2[obj.age]){
            item.push(obj);
        }
        obj2[obj.name]=true;
    }
    return item;
},[]);
console.log("newArr2",newArr2);

2.结果展示

Javascript的几种数组去重_第3张图片

你可能感兴趣的:(JavaScript,javascript,数组,去重)