javascript数组去重的三种常用方法,及其性能比较
2014-12-22 09:04
567 查看
原文:javascript数组去重的三种常用方法,及其性能比较 在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率
方法一
采用两次循环
原理:拿当前的和他后面的比,如果后面的有重复的就干掉
但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了
执行效率实在不敢恭维,我的电脑比这多就不能执行了
所以考虑用对象替代(对象的属性名字不会重复)方法二
此方法执行效率较高,数组很多内容也不会浏览器奔溃,但循环使用两次
采用另一种方法:方法三
原理: 循环数组,把数组中的每一项当做obj对象的属性名和属性值存进来,
但是我们发现如果obj对象中已经存在了这个属性名的话,那就说明数组重复了,那我们删除重复的项
不过经过测试这个方法和方法一效率差不多,不信可以尝试下,故还是推荐方法二
对此封装成方法
能力有限,希望能给大家带来帮助
方法一
采用两次循环
原理:拿当前的和他后面的比,如果后面的有重复的就干掉
但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环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());
能力有限,希望能给大家带来帮助
相关文章推荐
- javascript数组去重的三种常用方法,及其性能比较
- javascript数组去重的三种常用方法,及其性能比较
- JavaScript数组及其常用方法(push、pop、shift···)
- javascript数组去重3种方法的性能测试与比较
- javascript 三种数组复制方法的性能对比
- javascript数组去重的三种常用方法总结
- ASP:用ADO连接数据库的三种方法及其性能比较
- javascript数组去重的三种常用方法总结
- javascript 三种数组复制方法的性能对比
- javascript数组去重3种方法的性能测试与比较
- javascript数组去重方法性能测试比较
- C#判断字符串是否为空的三种方法及其比较
- Java 判断字符串是否为空的三种方法性能比较
- javascript数组常用方法
- 数组排序方法的性能比较(4):LINQ方式的Array排序
- javascript 中 数组常用的扩展方法
- 数组排序方法的性能比较(3):LINQ排序实现分析
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 数组排序方法的性能比较(5):对象大小与排序性能
- 数组排序方法的性能比较(1):注意事项及试验