zoukankan      html  css  js  c++  java
  • js数组去重问题

    1. 双层循环:外层循环,内层比较值;

    (1)利用splice直接在原数组进行操作

    Array.prototype.delRepeat = function (){
     var arr = this;
     var 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--;
       }
      }
     }
     return arr;
    };
    var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

    2. 利用对象的属性不能相同的特点进行去重 

    Array.prototype.delRepeat = function (){
     var arr = this;
     var i;
     var obj = {};
     var result = [];
     for(i = 0; i< arr.length; i++){
      if(!obj[arr[i]]){ 
       obj[arr[i]] = 1;
       result.push(arr[i]);
      }
     }
     return result;
    };
    var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]  

    3. 利用ES6的set

     (1)利用Array.from将Set结构转换成数组

    function delRepeat(array){
     return Array.from(new Set(array));
    }
    var a = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    console.log(a.delRepeat()); //[1, 2, 4, 5, 6, 3, 9]
    

     (2)拓展运算符(...)内部使用for...of循环

    let arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    let resultArr = [...new Set(arr)]; 
    console.log(resultArr); 
    

    4.借助indexOf()方法,判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

    (1)不借助新数组,使用splice();

    var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    function delRepeat(arr){
      for (var i = 0; i < arr.length; i++) {
            if (arr.indexOf(arr[i]) != i) {
                arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
                i--;//数组下标回退
            }
        }
         return arr;
     }
    
    console.log( delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]
    

    (2)借助新数组;

    var ar = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    function delRepeat(arr) {
     var result = [];
     for (var i = 0; i < arr.length; i++) {
      if (arr.indexOf(arr[i]) == i) {
      result.push(arr[i]);
      }
    }
     return result;
    }
    
    console.log(delRepeat(ar)); // [1, 2, 4, 5, 6, 3, 9]  

    (3)借助新数组  判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

    Array.prototype.delRepeat = function(){
        var newArr = [];
        for(var i = 0; i < this.length; i++){
            if(newArr.indexOf(this[i])== -1){
                newArr.push(this[i]);
            }
        }
        return newArr;
    }
    var arr = [1,2,4,4,5,6,5,3,2,4,9,4,1,2,9,1,1];
    console.log(arr.delRepeat()); // [1, 2, 4, 5, 6, 3, 9]  

    5. 利用数组中的filter方法

    var arr = ['a','f','b','p','e','a','o','f'];
    var result = arr.filter(function(element,index,self){
      return self.indexOf(element) === index;
    });
    console.log(result); //["a", "f", "b", "p", "e", "o"]
    

      

      

      

      

      

      

  • 相关阅读:
    ! JOISC2020DAY2变色龙之恋
    ! JOISC2020DAY1扫除
    JOISC2020DAY1汉堡肉
    JOISC2020DAY1建筑装饰4
    ! JLOI/SHOI2016随机序列
    JLOI/SHOI2016黑暗前的幻想乡
    ! JLOI/SHOI2016成绩比较
    JLOI/SHOI2016方
    JLOI/SHOI2016侦查守卫
    ! AHOI/HNOI2017抛硬币
  • 原文地址:https://www.cnblogs.com/Amy-world/p/9795378.html
Copyright © 2011-2022 走看看