javascript数字数组去重复项的实现代码

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];

  }

  }