数组去重

2017-05-21  本文已影响0人  他在发呆
let array = [1,2,3,3,4,2,4,5];

方法一(通过indexOf,返回该数组下表)

        Array.prototype.unique = function()
        {
            var n = [this[0]]; //结果数组
            for(var i = 1; i < this.length; i++) //从第二项开始遍历
            {
            //  //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
            //  //那么表示第i项是重复的,忽略掉。否则存入结果数组
                if (this.indexOf(this[i]) == i) n.push(this[i]);
                console.log(this.indexOf(this[i]),i);
            }
            return n;
        }
调用
    array.unique()

方法二(通过sort从小到大排序,然后遍历数组比较相邻元素是否相等)

    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;
        }
        调用
        array.unique();

方法三(通过哈希表)

        Array.prototype.unique = function()
        {
            var n = {},r=[]; //n为hash表,r为临时数组
            for(var i = 0; i < this.length; i++) //遍历当前数组
            {
                console.log(n[this[i]])
                if (!n[this[i]]) //如果hash表中没有当前项
                {
                    n[this[i]] = true; //存入hash表
                    r.push(this[i]); //把当前数组的当前项push到临时数组里面
                }
            }
            return r;
        }
        array.unique()

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表


方法四(类似于方法一)
方法一是假设当前元素的下标是否是重复的
方法四是判断有没有这个下标,没有返回-1;

        Array.prototype.unique = function()
        {
            var n = []; //一个新的临时数组
            for(var i = 0; i < this.length; i++) //遍历当前数组
            {
                //如果当前数组的第i已经保存进了临时数组,那么跳过,
                //否则把当前项push到临时数组里面
                console.log(n.indexOf(this[i]),n);
                if (n.indexOf(this[i]) == -1) n.push(this[i]);
            }
            return n;
        }
        array.unique()

上一篇 下一篇

猜你喜欢

热点阅读