Posted in Javascript onDecember 30, 2010
test.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>array-remove-repeate</title> <style> .tt{ background-color:#006699; height:3px; overflow:hidden;} </style> </head> <body> <div class="tt"></div> <div class="result" id="result"></div> <script> if(!console) { var console={}; console.log=function(str){alert(str);} } 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(","); } 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; } var test=(function() { var arr2=[]; for(var i=0;i<2000;i++) { var t=i; t=parseInt(Math.random()*2000)+1; arr2[i]=(t.toString()); } //arr2=["zhoujian","zhou","zhou"]; return function(){ return arr2; //return [1,2,3,3]; }; })(); window.onload=function(){ // Watch.start("Cost times1:"); var arr= test(); console.log(arr.length ); arr=arr.unique1(); console.log(arr.length); Watch.stop(); // Watch.start("Cost times2:"); arr= test(); console.log(arr.length); arr=arr.unique2(); console.log(arr.length); Watch.stop(); // Watch.start("Cost times3:"); arr= test(); console.log(arr.length ); arr=arr.unique3();//数组很大时,最快 console.log(arr.length ); Watch.stop(); // Watch.start("Cost times4:"); arr= test(); console.log(arr.length); arr=arr.unique4(); console.log(arr.length); Watch.stop(); Watch.report(); } </script> </body> </html>
Watch.js
var Watch = { result: [], guid: -1, totalTime: 0, start: function(title){ this.result[++this.guid] = [title || this.guid, new Date().getTime()]; }, stop: function(){ var r = this.result[this.guid]; var t = new Date().getTime() - r[1]; this.totalTime += t; r[1] = t; if(t>=10000){ alert("This code takes too long to run,you should optimizate them."); } }, report: function(parent){ var div = document.createElement("div"); div.style.fontSize = "12px"; var str = []; str.push("<p><b>The total times:</b><span style='color:#f00'>" + this.totalTime + "</span> ms.</p>"); for (var i = 0, l = this.result.length; i < l; i++) { if (this.result[i].length > 1) { str.push("<p>" + "<span style='width:200px;display:inline-block;background-color:#f7f7f7;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;'>"+"<span style='background-color:#0c0; -moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;width=" + (this.totalTime === 0 ? this.totalTime : parseInt(200 * this.result[i][1] / this.totalTime)) + "px; display:inline-block;'>"+this.result[i][1]+"</span>"+"</span> <span style='width:150px; display:inline-block;'>" + this.result[i][0] + "</span>" + "</p>"); }else{ str.push(this.result[i][0]); } } div.innerHTML = str.join(""); parent = parent || document.body; parent.appendChild(div); div = null; this.totalTime = 0; this.guid = -1; this.result=[]; }, fns: function(){ var a = arguments; for (var i = 0, l = a.length; i < l; i++) { this.start(a[i][0]); a[i][1](); this.stop(); } }, execByTimes: function(fn, times, title){ this.start(title); while (times--) { fn(); } this.stop(); }, print: function(str){ this.result[++this.guid]=[str]; } }
javascript数字数组去重复项的实现代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@