您的位置:首页 > Web前端 > JavaScript

javascript数组去重的三种常用方法,及其性能比较

2014-12-22 09:04 567 查看
原文:javascript数组去重的三种常用方法,及其性能比较 在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率

方法一
采用两次循环
原理:拿当前的和他后面的比,如果后面的有重复的就干掉
但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了

var arr=[1,3,5,3,5];

var len=arr.length;
for(var i=0;i<len-1;i++){
var curItem=arr[i];//当前项
for(var j=i+1;j<len;j++){
if(curItem==arr[j]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr);


执行效率实在不敢恭维,我的电脑比这多就不能执行了

所以考虑用对象替代(对象的属性名字不会重复)方法二

var arr=[1,3,5,3,5,3,4,6,2,2,2,1];
var len=arr.length;
var obj={};

for(var i=0;i<len;i++){
var cur=arr[i];//当前项
obj[cur]=cur;
}
var list=[];
for(key in obj){
list.push(obj[key])
}
console.log(list);


此方法执行效率较高,数组很多内容也不会浏览器奔溃,但循环使用两次

采用另一种方法:方法三

原理: 循环数组,把数组中的每一项当做obj对象的属性名和属性值存进来,
但是我们发现如果obj对象中已经存在了这个属性名的话,那就说明数组重复了,那我们删除重复的项

var arr=[1,3,5,3,5,3,4];
var len=arr.length;
var obj={};
for(var i=0;i<len;i++){
var cur=arr[i];//当前项
if(obj[cur]==cur){
arr.splice(i,1);
i--
}else{
obj[cur]=cur;
}

}
obj=null;
console.log(arr);


不过经过测试这个方法和方法一效率差不多,不信可以尝试下,故还是推荐方法二

对此封装成方法

var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634];
Array.prototype.arr_unique=function (){
var len=this.length;
var obj={};

for(var i=0;i<len;i++){
var cur=this[i];//当前项
obj[cur]=cur;
}
var list=[];
for(key in obj){
list.push(obj[key])
}

return list;

};

console.log(arr.arr_unique());


能力有限,希望能给大家带来帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: