js 数组去重复项的五种方法比较
2016-05-27 10:59
537 查看
第一种:耗时最长,用了双重循环
第二种:用了正则表达式
第三种:用了hasOwnProperty
第四种:先排序,再比较相邻的
第五种:用了hash,耗时最短
测试方法:
借鉴于:js数组去重复项
Array.prototype.unique1 = function () { var r = new Array(); label:for(var i = 0, n = this.length; i < n; i++) { for(var x = 0, y = r.length; x < y; x++) { if(r[x] == this[i]) { continue label; } } r[r.length] = this[i]; } return r; }
第二种:用了正则表达式
Array.prototype.unique2 = function () { return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(","); }
第三种:用了hasOwnProperty
Array.prototype.unique3 = function() { var temp = {}, len = this.length; for(var i=0; i < len; i++) { var tmp = this[i]; if(!temp.hasOwnProperty(tmp)) { temp[this[i]] = "my god"; } } len = 0; var tempArr=[]; for(var i in temp) { tempArr[len++] = i; } return tempArr; }
第四种:先排序,再比较相邻的
Array.prototype.unique4 = function () { var temp = new Array(); this.sort(); for(i = 0; i < this.length; i++) { if( this[i] == this[i+1]) { continue; } temp[temp.length]=this[i]; } return temp; }
第五种:用了hash,耗时最短
Array.prototype.unique5 = function() { var result=[], hash={}; for(var i=0;i<this.length;i++){ if(!hash[this[i]]){ result.push(this[i]); hash[this[i]]=true; } } return result; }
测试方法:
function testArr(){ var arr=[]; for(var i=0;i<100000;i++){ arr.push(i); } var d1=new Date().getTime(); arr.unique1(); console.log("unique1:执行了 "+(new Date().getTime()-d1)+" ms"); //unique1:执行了 4516 ms d1=new Date().getTime(); arr.unique2(); console.log("unique2:执行了 "+(new Date().getTime()-d1)+" ms"); //unique2:执行了 153 ms d1=new Date().getTime(); arr.unique3(); console.log("unique3:执行了 "+(new Date().getTime()-d1)+" ms"); //unique3:执行了 60 ms d1=new Date().getTime(); arr.unique4(); console.log("unique4:执行了 "+(new Date().getTime()-d1)+" ms"); //unique4:执行了 95 ms d1=new Date().getTime(); arr.unique5(); console.log("unique5:执行了 "+(new Date().getTime()-d1)+" ms"); //unique5:执行了 16 ms } testArr();
借鉴于:js数组去重复项
相关文章推荐
- javascript的this
- js 数字金额转汉字
- js基于cookie方式记住返回页面用法示例
- jswing中为dialog设置透明窗体
- 泛微OA自定义时间,验证时间JS代码
- js 获取年月日时间等案例
- js获取客户端操作系统类型的方法【测试可用】
- 复杂的json的解析(以和天气的json为例)
- js 获取当前时间操作
- JavaScript对象之原型
- js 扒一扒这些题目都考了哪些知识点
- 滚动栏改进,table切换,使广告随滚动条滚动
- 2016年5月27日上午(妙味课堂js基础-3笔记一(事件))
- js基础总结
- json解析二维对象
- js控制input输入的内容
- 读取本地json数据
- .Net深入实战系列—JSON序列化那点事儿
- 便签5-js延时器定时器
- js window.event 兼容浏览器问题