JavaScript去重的方法

来源:互联网 发布:常见的网络拓扑结构有 编辑:程序博客网 时间:2024/04/30 08:06

-----------------------------------------------------1-----------------------------------------------

Array.prototype.unique=function(){var n[];                              //一个新的临时数组for(var i=0;i<this.length;i++){   if(n.indexOf(this[i])==-1)       //新的数组里面没有这个元素就把i位置的旧元素放进新数组      n.push(this[i]);}}
-----------------------------------------------------2-----------------------------------------------

Array.prototype.unique=function(){var n{},r[];                              //n为哈希表,r为临时数组for(var i=0;i<this.length;i++){   if(!n[this[i]])   {      n[this[i]]=true;                  //把旧数组i位置的元素放入哈希表      r.push(this[i]);                 //把当前元素放进临时数组   }}}
-----------------------------------------------------3-----------------------------------------------
Array.prototype.unique=function(){var n=[this[0]];                    //新数组,先放入旧数组的第一个元素for(var i=1;i<this.length;i++)     //从第二项开始遍历{  if(this.indexOf(this[i])==i)    //就像1,5,7,5 第一个5在index==1时出现,满足this.indexOf(this[1])==1,                                  //而第二个5,this.indexOf(this[3])== 1 !=3     n.push(this[i]);}}
-----------------------------------------------------4-----------------------------------------------
Array.prototype.unique=function(){this.sort();                              //对数组进行排序var re=[this[0]];                        //新数组,先放入旧数组的第一个元素for(var i = 1; i < this.length; i++)    //从第二项开始遍历{if( this[i] !== re[re.length-1])    //比较相邻的两个值{re.push(this[i]); }}return re;}
    其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是hash表。把已经出现过的通过下标的形式存入一个object内。下标的引用要比用indexOf搜索数组快的多。但是内存占用方面应该第二种方法比较多,因为多了一个hash表。这就是所谓的空间换时间。第四种方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。
转自:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 点击打开链接

0 0