您的位置:首页>科学 >JavaScript数组去重的几种方法

JavaScript数组去重的几种方法

2023-10-06 16:40

前言

有时候我们在做项目的时候,经常需要去除数组中的一些重复项,但是原生JS有排序、过滤等功能,但是没有数组去重,怎么办?

我能做什么?我可以手动完成。

数组不像对象和哈希那样具有唯一的识别特征(键)。因此,数组去重的核心是[1]将数组中的元素相互比较,然后放入新数组中。 【2】参照该对象构造一个独特的特征标志,然后将其放入一个新数组中。下面是基于这个想法的方法。 [3] 为了删除数组中包含的重复对象,我使用 JSON.stringify() 将对象转换为 JSON 字符串以进行比较。

1。最基本的去重:双重遍历

双重遍历的核心基于[1]。通过取出一个元素,将其与顺序中剩余的元素进行比较,如果都不相等,则证明该元素是唯一的。

设a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 设 b=[]
 for(让 i=0;i

关于数组中是否存在对象,使用JSON.stringify()将其转换为JSON字符串进行比较,后面不再赘述。双重遍历的缺点是复杂度太高。
上面代码中去重得到的结果顺序会发生变化,所以如果希望顺序保持原来的顺序,建议去重时重新声明一个新数组(var new=old.reverse())要获得新的数组 对于相反的数组,请在最后使用reverse()。我们之所以创建一个新数组而不是直接反转它,是因为reverse()会修改原始数组。

2.Array.prototype.sort():相邻元素去重

相邻元素去重的核心是Array.sort()可以对数组进行排序。这样,相等的数组将处于相邻位置,并且可以通过比较相邻元素来消除重复[1]。

令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 让 Arr=arr.sort()
 设 b=[]
 for(让 i=0;i

Array.prototype.sort() 方法可以使用 array.sort((a,b)=>{www.webguidecorpuschristi.com}) 对对象进行排序,前提是数组中的对象具有相同的键值。

3.Object.keys():存在唯一性

键值在一个对象中是唯一的,因此通过遍历数组给每个数组赋予一个flag,通过flag去除重复项[2]

设a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 设 b=[]
 让散列={}
 for(让 i=0;i

4。双遍历去重改进:indexOf

我们都知道双重遍历的思想,先取出一个元素,然后用循环再次遍历数组来逐一比较。如果有一种方法可以让我们不再遍历数组,那么复杂度就会相对降低。

indexOf 方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回 -1。首先,我们创建一个新的空数组(arry)。如果: arry.indexOf(array element) ==-1,那么我们可以知道 arry 中没有元素。

令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 设 b=[]
 for(让 i=0;i

indexOf 方法返回指定字符串值在字符串中第一次出现的位置。因此,对象是不适用的,因为如果将对象转为字符串,就会变成{object, object},无法进行比较。

5。循环遍历:map()/forEach()

map() 和 forEach() 都可以遍历数组。因此,可以使用map()和forEach()重写上述方法。下面我简单重写一种,其他重写方法大家可以参考。

令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 设 b=[]
 arr.forEach(res=>{
 if(b.indexOf(res)==-1){
  b.推(res)
 }
 })
 返回b
}

www.webguidecorpuschristi.com6:设置数据结构

集合数据类似于数组,但成员的值是唯一的,不存在重复值。它可以接收一个数组,类似于:let a=[1,2,3,1,2] Set(a)=>1,2,3,所以可以使用Set()来实现去重。

令 c=[1,2,3,4,5,6,1,2,3]
函数唯一(arr){
 让b=新集合(arr)
 让 c=Array.from(b)
 返回c
}

Set去重不适用于包含对象的数组,因为Set去重指的是(===)。尽管数组中的元素对象可能具有相等的值,但它们的地址不相等。所以Set无法实现去重。

7。总结

实现数组的去重,可以通过元素比较或者设置特殊标志来识别。元素比较有两种方式:一种是与原数组一一比较;另一个是与新数组进行比较。

如果要实现包含对象的数组去重,一般会使用遍历,包括使用遍历类方法(map、forEach、reduce等)。通过改变数组来设置、排序等方法一般都不可行。

好了,这就是本文的全部内容了。希望本文的内容对大家的学习或者工作有一定的参考价值。感谢您对莱客网的支持。