数组去重可以使用indexOf()方法进行检测,但是这样的效率实在是低,我们可以使用hash表的形式来进行对每一个数组进行存储,这样节省了时间,但是占据了一定的空间。
Array.prototype.unique2 = function()
{
var n = {},r=[]; //n为hash表,r为临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
if (!n[this[i]]) //如果hash表中没有当前项
{
n[this[i]] = true; //存入hash表
r.push(this[i]); //把当前数组的当前项push到临时数组里面
}
}
return r;
}
还有第二种比较好的办法,就是先将数组进行排序,然后比较相邻的两个数组是否相等,这样在时间上有一定的增长,但是也节省了很多空间,在综合考虑相对比较不错,代码如下:
Array.prototype.unique4 = 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;
}