首页 > 代码库 > javascript数组去重的三种常用方法,及其性能比较
javascript数组去重的三种常用方法,及其性能比较
原文:javascript数组去重的三种常用方法,及其性能比较
在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率
方法一
采用两次循环
原理:拿当前的和他后面的比,如果后面的有重复的就干掉
但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了
1 var arr=[1,3,5,3,5]; 2 3 var len=arr.length; 4 for(var i=0;i<len-1;i++){ 5 var curItem=arr[i];//当前项 6 for(var j=i+1;j<len;j++){ 7 if(curItem==arr[j]){ 8 arr.splice(j,1); 9 j--;10 }11 }12 }13 console.log(arr);
执行效率实在不敢恭维,我的电脑比这多就不能执行了
所以考虑用对象替代(对象的属性名字不会重复)方法二
1 var arr=[1,3,5,3,5,3,4,6,2,2,2,1]; 2 var len=arr.length; 3 var obj={}; 4 5 for(var i=0;i<len;i++){ 6 var cur=arr[i];//当前项 7 obj[cur]=cur; 8 } 9 var list=[];10 for(key in obj){11 list.push(obj[key])12 }13 console.log(list);
此方法执行效率较高,数组很多内容也不会浏览器奔溃,但循环使用两次
采用另一种方法:方法三
原理: 循环数组,把数组中的每一项当做obj对象的属性名和属性值存进来,
但是我们发现如果obj对象中已经存在了这个属性名的话,那就说明数组重复了,那我们删除重复的项
1 var arr=[1,3,5,3,5,3,4]; 2 var len=arr.length; 3 var obj={}; 4 for(var i=0;i<len;i++){ 5 var cur=arr[i];//当前项 6 if(obj[cur]==cur){ 7 arr.splice(i,1); 8 i-- 9 }else{10 obj[cur]=cur;11 }12 13 }14 obj=null;15 console.log(arr);
不过经过测试这个方法和方法一效率差不多,不信可以尝试下,故还是推荐方法二
对此封装成方法
1 var arr=[1,3,5,3,5,3,4,6,2,2,2,1,7,84,34,634]; 2 Array.prototype.arr_unique=function (){ 3 var len=this.length; 4 var obj={}; 5 6 for(var i=0;i<len;i++){ 7 var cur=this[i];//当前项 8 obj[cur]=cur; 9 }10 var list=[];11 for(key in obj){12 list.push(obj[key])13 }14 15 return list;16 17 };18 19 console.log(arr.arr_unique());
能力有限,希望能给大家带来帮助
javascript数组去重的三种常用方法,及其性能比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。