数组去重

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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判...
    LuckyS007阅读 548评论 0 3
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,775评论 0 33
  • 数组去重的多种方法 遍历数组法 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值...
    啾啾哒阅读 1,238评论 0 0
  • 数组去重方式 快速排序
    black白先森阅读 211评论 0 0
  • 你的手 放在我的肩上 安心睡去 我因此不能入睡 娇小的身躯也抵挡不住黑夜的漫长 变得厚重 但你的姿态毫不改变 这只...
    南途丶阅读 163评论 0 0