第一种:耗时最长,用了双重循环
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数组去重复项
    
   
js数组去重复项
    方法五原理:
   
我们可以 用一个hashtable的结构(采用的是数据结构中所说的链地址法处理冲突的方法)记录已有的元素,这样就可以避免内层循环。
      
    
恰好,在Javascript中实现hashtable是很简单(JavaScript中允许任意对象作为下标,使的Object可以有任意的key做为属性),改进如 下:
      
    
 
