JavaScript数组去重的几种方法

  

  

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢?
  

  

这能怎么办,自己手动实现嘛。

  

数组不像对象和散列有唯一的标志特征(关键),所以,数组去重的核心就是【1】数组内元素互相比较,然后放入新的数组中。【2】参照对象构建一个唯一的特征标志,然后放入新数组中。以下就是依照这种思路产生的方法。【3】数组中含对象的去重方式我采用使用<代码> JSON.stringify() 将对象转换成JSON字符串进行比较的方式。
  

  

  

双重遍历的核心就是依据【1】,通过拿出一个元素和剩下的元素依次比较,如果全部不相等则证明此元素为唯一。

        让=[{:1},{b: 2}, {3 c:}, {: 1}, {2 d:}]   让c=[1, 2, 3, 4, 5, 6, 1, 2, 3]   功能独特的(arr) {   让b=[]   (让我=0;i      

关于数组中存在对象,是采用<代码> JSON.stringify() 转换成JSON字符串进行的比较,后续不再叙述。双重遍历的缺点是复杂度太高。
  上面的代码去重得到的结果的顺序会改变,所以如果想要顺序按照原有顺序,数组在进行去重时建议重新申明一个新的数组(<代码> var=old.reverse() )得到一个新的相反的数组,最后再使用反向()。之所以新建数组而不是直接取反是因为:<代码>反向()会修改原数组。

  


  

  

相邻元素去重的核心在于<代码> Array.sort() 能够对数组进行排序。这样相等的数组就会在相邻的位置,通过比较相邻的元素就可以起到去重的作用【1】。
  

        让c=[1, 2, 3, 4, 5, 6, 1, 2, 3]   功能独特的(arr) {   让Arr=arr.sort ()   让b=[]   (让我=0;i      

<代码> Array.prototype.sort() 方法可以使用<代码> array.sort ((a, b)=祝辞{a.key-b.ky}) 进行对象的排序,前提是数组中的对象存在相同的关键值。

  


  

  

在一个对象里面关键值是唯一的,所以通过遍历数组给每个数组一个标志,通过标志去重【2】
  

        让=[{:1},{b: 2}, {3 c:}, {: 1}, {2 d:}]   让c=[1, 2, 3, 4, 5, 6, 1, 2, 3]   功能独特的(arr) {   让b=[]   让散列={}   (让我=0;i      

  

双重遍历的思路我们都知道,先拿出一个元素,然后使用循环再次遍历数组去一一比较。如果有一个方式能够让我们不再遍历一遍数组,那么复杂度相对而言会减少一点。
  

  

indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回1。首先我们新建一个空数组(进行),如果:<代码> arry.indexOf>         让c=[1, 2, 3, 4, 5, 6, 1, 2, 3]   功能独特的(arr) {   让b=[]   (让我=0;i      

indexOf方法可返回某个指定的字符串值在字符串中首次出现的位置,所以对象不适用,因为对象转为字符串就都会变成<代码>{对象,对象}>   

  

map()和forEach()都可以实现遍历数组,所以以上的方法都可以用地图(),forEach()改写。下面我只简单的改写一个,其他的改写方式参照即可。

        让c=[1, 2, 3, 4, 5, 6, 1, 2, 3]   功能独特的(arr) {   让b=[]   arr.forEach (res=祝辞{   如果(b.indexOf (res)==1) {   b.push (res)   }   })   返回b   }      


  

  

设置数据类似于数组,但是成员的值都是唯一的,没有重复的值。它可以接收一个数组,类于:

JavaScript数组去重的几种方法