Javascript中数组查重的方法总结大全

数组查重:简单点说,就是找出数组中重复的元素然后去除,最后得到一个没有重复元素的数组。

// 方法一思路:
    1.构建一个新的数组,用于存放结果。  
    2.for循环中每次从数组取出一个元素,用这个元素与结果数组的中的每个元素相比。  

    3.若结果数组中没有和取出的元素相同,则存放在结果数组中。

[javascript] view plain copy
  1. //自定义函数  
  2. var ret= function(arr){  
  3.     var res=[arr[0]];  
  4.     for(var j=1;j<arr.length;j++){  
  5.         var repeat= false;  
  6.         for(var i=0;i<res.length;i++){  
  7.            if(arr[j]==res[i]){  
  8.                repeat=true;  
  9.                break;  
  10.            }  
  11.         }  
  12.         if(!repeat){  
  13.            res.push(arr[j]);  
  14.         }  
  15.     }  
  16.     return res;  
  17. };  
  18. var a=[1,3,4,3,5,'aa','bb','aa'];  
  19. document.write(ret(a));  //1,3,4,5,aa,bb  
  20.   
  21. //或者给数组添加方法  
  22. Array.prototype.ret= function(){  
  23.     var res=[this[0]];  
  24.     for(var j=1;j<this.length;j++){  
  25.         var repeat= false;  
  26.         for(var i=0;i<res.length;i++){  
  27.            if(this[j]==res[i]){  
  28.                repeat=true;  
  29.                break;  
  30.            }  
  31.         }  
  32.         if(!repeat){  
  33.            res.push(this[j]);  
  34.         }  
  35.     }  
  36.     return res;  
  37. }  
  38. var a=[1,3,4,3,5,'aa','bb','aa'];  
  39. document.write(a.ret());  //1,3,4,5,aa,bb  


//方法二思路:(有点:查重效率高;缺点:由于查重之前对数组进行了排序,还回结果也是排序的,如果不改变原数组的顺序去重,那这种方法便不可取了。)
    1.首先给原数组进行排序。
    2.检查原数组的第i个元素与结果数组的最后一个元素是否相等。因为已经排序,所以重复元素会在相邻位置。
    3.如果不相同,则将该元素存入结果数组中。

[javascript] view plain copy
  1. //自定义函数  
  2. var ret1= function(arr){  
  3.     arr.sort();  
  4.     var res= [arr[0]];  
  5.     for(var i=1;i<arr.length;i++){  
  6.        if(arr[i]!=res[res.length-1]){  
  7.          res.push(arr[i]);  
  8.        }  
  9.     }  
  10.     return res;     
  11. }  
  12. var b= [1,3,4,2,3,4];  
  13. document.write(ret1(b));  //1,2,3,4  
  14.   
  15. //或者给数组添加方法  
  16. Array.prototype.ret1= function(){  
  17.     this.sort();  
  18.     var res= [this[0]];  
  19.     for(var i=1;i<this.length;i++){  
  20.        if(arr[i]!=res[res.length-1]){  
  21.          res.push(this[i]);  
  22.        }  
  23.     }  
  24.     return res;     
  25. }  
  26. var b= [1,3,4,2,3,4];  
  27. document.write(b.ret1());  //1,2,3,4  
  28.    

/方法三思路:(推荐使用这个方法)
    1.定义一个结果数组存放结果。
    2.创建一个新对象。
    3.for循环的时候,每次取出一个元素与对象对比,如果这个元素不重复则把它放在结果数组里,同时把这个元素的内容作为对象的属性,并赋值为1。
说明:至于如何对比取出的元素与对象,就是每次从原数组取出一个元素,然后到对象中访问这个属性,如果访问到值,则说明重复。

[javascript] view plain copy
    1. //自定义函数  
    2. var ret2= function(arr){  
    3.     var res=[];  
    4.     var json={};  
    5.     for(var i=0;i<arr.length;i++){  
    6.        if(!json[arr[i]]){  
    7.           res.push(arr[i]);  
    8.           json[arr[i]]=1;  
    9.        }  
    10.     }  
    11.     return res;  
    12. }  
    13. var c=[1,2,3,2,1];  
    14. document.write(ret2(c)); //1,2,3  
    15.   
    16. //或者给数组添加方法  
    17. Array.prototype.ret2= function(){  
    18.     var res=[];  
    19.     var json={};  
    20.     for(var i=0;i<this.length;i++){  
    21.        if(!json[this[i]]){  
    22.           res.push(this[i]);  
    23.           json[this[i]]=1;  
    24.        }  
    25.     }  
    26.     return res;  
    27. }  
    28. var c=[1,2,3,2,1];  
    29. document.write(c.ret2()); //1,2,3 
原文地址:https://www.cnblogs.com/ljk001/p/8000239.html