数组去重

数组去重可以使用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;
}

你可能感兴趣的:(数组去重)