-----------------------------------------------------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 点击打开链接