最近在做笔试题,遇到很多情况都需要进行去重操作,比如说数组去重,数组中的对象去重,对象中的数组去重以及字符串去重等。现在我来进行一下总结。
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以下都不支持,而且速度在四种方法中处于第三。不建议使用。
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迭代出对象的属性,速度是四个中最快的。
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);