JavaScript系列--数组去重

网摘:http://www.jb51.net/article/118657.htm

(一)两层for循环

  Array.prototype.distinct = function (){
     let arr = this;
     let len = arr.length;
     for(let i = 0; i < len; i++){
      for(let j = i + 1; j < len; j++){
       if(arr[i] == arr[j]){
        arr.splice(j,1);
        len--;
        j--;
       }
      }
     }
     return arr;
    };
    var a = [1,2,3,2,1];
    var b = a.distinct();
    console.log(b);

(二)利用对象内属性不能相同的特点进行去重

  Array.prototype.uniq2 = function(){
        let arr = [];
        let obj = {};
        for(let i = 0; i < this.length;i++){
            if(!obj[this[i]]){
                obj[this[i]] = 1;
                arr.push(this[i]);
            }
        }
        return arr;
    }
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    console.log(arr.uniq2());

(三)利用forEach和indexOf进行去重

  Array.prototype.uniq3 = function(){
        let arr = this;
        let result = [];
        let len = arr.length;
        arr.forEach(function(v,i,arr){//map()、filter()也可以实现
            if(arr.indexOf(v,i+1) === -1){//若果只穿一个索引参数v,
  然后arr.indexOf(v,v+1)会报错arr.indexOf() is not a function() #待解决#
                result.push(v);
            }
        });
        return result;
    }
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    console.log(arr.uniq3());

(四)利用ES6的Set()

set数据结构,它类似于数组,其成员都是唯一的,利用Array.from将set结构转换成数组

    function uniq4(array){    
        //第一种方法
        // return Array.from(new Set(array));//控制台没有输出
        // console.log(Array.from(new Set(array)));
        //第二种方法:拓展运算符(...)内部使用for...of循环        
        let resultArr = [...new Set(array)];
        console.log(resultArr);
    }
    uniq4([1,2,3,3]);

感谢阅读我的文章,如有疑问或写错的地方,请不吝留言赐教

你可能感兴趣的:(JavaScript系列--数组去重)