美文网首页
数组去重

数组去重

作者: Vampire丶_L | 来源:发表于2018-06-14 12:01 被阅读0次

方法一:

思路:双层循环,外层循环元素内层循环比较值,如果有相同的就跳过,没有相同的就push。


         function distinct(arr) {
            var newArray = [];
            for(var i=0;i<arr.length;i++){
                for(var j=i+1;j<arr.length;j++){
                    if(arr[i] === arr[j])
                     j = ++i;//核心代码
                }
                newArray.push(arr[i]);
            }
            return newArray;
        }
        var arr = [1,1,2,2,3,4]
        var arr1 = [1,1,2,2,1,4]
       console.log(distinct(arr));//[1,2,3,4]
       console.log(distinct(arr1));//[2,1,4]

上面算法的核心代码是 “ j = ++i ”,在内层循环中直接跳过此轮比较的方法就是++i,但是为什么要将++i赋值给j呢,这是因为如上代码中arr1数组中1重复的方式:相隔数个数字又会存在重复,在内层循环中,j的值已经递增,再进行下一轮,此时中间相隔的部分就没有进行比较,下面来看一下代码:

         function distinct(arr) {
            var newArray = [];
            for(var i=0;i<arr.length;i++){
                for(var j=i+1;j<arr.length;j++){
                    if(arr[i] === arr[j])
                      ++i;//核心代码
                }
                newArray.push(arr[i]);
            }
            return newArray;
        }
        var arr1 = [1,1,2,2,1,4]
       console.log(distinct(arr1));//[2,2,1,4]

就像这样会漏掉了一部分比较;
综上,我总结一下对“跳过此轮”的理解:i直接进入下一轮循环,j要紧跟在i的后面,所以 j = ++i;继续循环j就会自增

方法二

思路:利用对象的key值得唯一性,来去重,得到得是新得不重复得数组

        function distinct(arr) {
            var o = {};
            var new_array = [];
            for (var i = 0; i < arr.length; i++) {
                 var k = arr[i];
                if (!o[k]){
                    o[k] = true;  
            //给o对象加一个新属性,当遇到重复得时候if里得判断条件就会变成false
                    new_array.push(k);
                }
            }
            return new_array;
        }
        var arr = [1, 1, 2, 2, 1, 3, 4];
        console.log(distinct(arr));//[1,2,3,4]

方法三:双层循环,内层比较,遇到相等的就删除;

        Array.prototype.distinct = function(){
            var arr = this, //this指的是调用此函数的数组
            i,
            j,
            len = arr.length;
            for( i = 0;i<len;i++){
                for( j= i+1;j<len;j++){
                    if(arr[i] === arr[j]){
                        arr.splice(j,1);
                        len--;//删除相同的元素,数组的长度也要减少
                        j--;//j也要减少
                    }
                }
            }
            return arr;
        }
        var a = [1,1,2,2,3,1,2,4,5,6,4,2,4];
         var b = a.distinct();
         console.log(b);

相关文章

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

  • 数组去重

    传统方法 ES6 扩展 传统方法 最后再写到 Array.prototype 原型中

  • 数组去重

    老题了。。虽然网上一搜一大堆,还是自己想了想,自己动笔写了几种。

网友评论

      本文标题:数组去重

      本文链接:https://www.haomeiwen.com/subject/laieeftx.html