最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 正文

js数组去重复元素

来源:懂视网 责编:小OO 时间:2024-05-03 06:44:23
文档

js数组去重复元素

常用的JS数组去重方法有哪些?。常用的JS数组去重方法有以下几种。1. 使用ES6的Set对象去重。Set是一种新的数据结构,其中的元素是唯一的,可以将数组转化为Set数据结构,然后再转回数组即可去重。2. 利用for嵌套for,然后splice去重。通过使用双重for循环结合数组的splice方法来实现数组去重,这是一种比较常用的方法。3. 利用indexOf去重。通过遍历数组,利用indexOf方法判断元素是否存在于新数组中,如果不存在则添加到新数组中。4. 利用对象的属性不能相同的特点进行去重。通过遍历数组,将数组元素作为对象的属性名和属性值,如果对象中已经存在该属性,则说明该元素重复。
推荐度:
导读常用的JS数组去重方法有哪些?。常用的JS数组去重方法有以下几种。1. 使用ES6的Set对象去重。Set是一种新的数据结构,其中的元素是唯一的,可以将数组转化为Set数据结构,然后再转回数组即可去重。2. 利用for嵌套for,然后splice去重。通过使用双重for循环结合数组的splice方法来实现数组去重,这是一种比较常用的方法。3. 利用indexOf去重。通过遍历数组,利用indexOf方法判断元素是否存在于新数组中,如果不存在则添加到新数组中。4. 利用对象的属性不能相同的特点进行去重。通过遍历数组,将数组元素作为对象的属性名和属性值,如果对象中已经存在该属性,则说明该元素重复。

常用的JS功到自然成数组去重方耳廓法有哪些?开弓不放箭。常用的J秀丽S数组去重敏锐方法有以下学富五车任人唯贤几种。1.苗条 使用ES蚂蚁搬泰山6的Set板板六十四对象去重。蚂蚁搬泰山Set是一穿一条裤子种新的数据时过境迁结构,其中动人的元素是唯好心无好报一的,可以秀丽将数组转化不打不成器为Set数金钗十二行据结构,然九牛拉不转大眼瞪小眼后再转回数落花难上枝组即可去重富贵草头露。2. 利换汤不换药病去如抽丝用for嵌礼义生富足套for,出其不意然后spl耳廓富相ice去重笨重。通过使用感激双重for潇洒优美循环结合数丰满组的spl不骄不躁海晏河清ice方法嫣然一笑来实现数组欲说还休去重,这是沧海桑田抑扬顿挫一种比较常细挑用的方法。言行一致3. 利用五谷丰登index胁肩谄笑Of去重。看人下菜碟通过遍历数细挑组,利用i万众一心ndexO鹿死不择荫f方法判断得病乱投医元素是否存不求甚解在于新数组有始有终中,如果不金钗十二行存在则添加海啸山崩到新数组中开弓不放箭。4. 利见物不见人用对象的属夜以继日性不能相同幸福的特点进行防祸于未然去重。通过换汤不换药病去如抽丝遍历数组,座无虚席发奋图强将数组元素富相作为对象的美丽属性名和属急则抱佛脚性值,如果猢狲入布袋对象中已经狡诈存在该属性浮光掠影,则说明该吃力不讨好元素重复。内容来自懂视网(www.51dongshi.com),请勿采集!

小编还为您整理了以下内容,可能对您也有帮助:

JavaScript数组去重的几种方法



前言

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


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

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


1.最基础的去重:双重遍历

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

let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
let unexit=true
for(let j=i+1;j<arr.length;j++){
if(JSON.stringify(arr[i])===JSON.stringify(arr[j])){
unexit=false
break
}
else{
unexit=true
}
}
if(unexit){
b.push(arr[i])
}
}
return b
}
关于数组中存在对象,是采用JSON.stringify()转换成JSON字符串进行的比较,后续不再叙述。双重遍历的缺点是复杂度太高。
上面的代码去重得到的结果的顺序会改变,所以如果想要顺序按照原有顺序,数组在进行去重时建议重新申明一个新的数组(var new=old.reverse() )得到一个新的相反的数组,最后再使用reverse()。之所以新建数组而不是直接取反是因为:reverse()会修改原数组。

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


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


let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let Arr=arr.sort()
let b=[]
for(let i=0;i<Arr.length;i++){
if(Arr[i]!==Arr[i+1]){
b.push(Arr[i])
}
}
return b
}
Array.prototype.sort()方法可以使用array.sort((a,b)=>{a.key-b.ky})进行对象的排序,前提是数组中的对象存在相同的key值。

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


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


let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
let hash={}
for(let i=0;i<arr.length;i++){
if(!hash[JSON.stringify(arr[i])]){
hash[JSON.stringify(arr[i])]=true
b.push(arr[i])
}
}
return b
}
4.双重遍历去重改良之:indexOf

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


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

let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
if(b.indexOf(arr[i])==-1){
b.push(arr[i])
}
}
return b
}
indexOf 方法可返回某个指定的字符串值在字符串中首次出现的位置。所以对象不适用,因为对象转为字符串就都会变成{object,object} ,无法比较。

5.循环遍历之:map()/forEach()

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

let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
arr.forEach(res=>{
if(b.indexOf(res)==-1){
b.push(res)
}
})
return b
}
6.ES6:Set数据结构


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


let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=new Set(arr)
let c=Array.from(b)
return c
}
Set去重不适用于含对象的数组,因为Set的去重参照的是(===),数组中的元素对象,虽然可能数值相等,但是地址不相等。所以Set无法实现去重。

7.总结

实现数组的去重,要么通过元素对比,要么设置特殊标志识别。元素对比的思路有2种:一种是和原数组一一对比;另一种和新的数组对比。


如果要实现含对象的数组去重,一般使用遍历的方式,包括使用遍历类的方法(map、forEach、rece等)。像Set、sort等通过改变数组的方式一般是不可行的。

好了,

JavaScript数组去重的几种方法



前言

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


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

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


1.最基础的去重:双重遍历

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

let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
let unexit=true
for(let j=i+1;j<arr.length;j++){
if(JSON.stringify(arr[i])===JSON.stringify(arr[j])){
unexit=false
break
}
else{
unexit=true
}
}
if(unexit){
b.push(arr[i])
}
}
return b
}
关于数组中存在对象,是采用JSON.stringify()转换成JSON字符串进行的比较,后续不再叙述。双重遍历的缺点是复杂度太高。
上面的代码去重得到的结果的顺序会改变,所以如果想要顺序按照原有顺序,数组在进行去重时建议重新申明一个新的数组(var new=old.reverse() )得到一个新的相反的数组,最后再使用reverse()。之所以新建数组而不是直接取反是因为:reverse()会修改原数组。

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


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


let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let Arr=arr.sort()
let b=[]
for(let i=0;i<Arr.length;i++){
if(Arr[i]!==Arr[i+1]){
b.push(Arr[i])
}
}
return b
}
Array.prototype.sort()方法可以使用array.sort((a,b)=>{a.key-b.ky})进行对象的排序,前提是数组中的对象存在相同的key值。

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


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


let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
let hash={}
for(let i=0;i<arr.length;i++){
if(!hash[JSON.stringify(arr[i])]){
hash[JSON.stringify(arr[i])]=true
b.push(arr[i])
}
}
return b
}
4.双重遍历去重改良之:indexOf

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


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

let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
if(b.indexOf(arr[i])==-1){
b.push(arr[i])
}
}
return b
}
indexOf 方法可返回某个指定的字符串值在字符串中首次出现的位置。所以对象不适用,因为对象转为字符串就都会变成{object,object} ,无法比较。

5.循环遍历之:map()/forEach()

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

let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
arr.forEach(res=>{
if(b.indexOf(res)==-1){
b.push(res)
}
})
return b
}
6.ES6:Set数据结构


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


let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=new Set(arr)
let c=Array.from(b)
return c
}
Set去重不适用于含对象的数组,因为Set的去重参照的是(===),数组中的元素对象,虽然可能数值相等,但是地址不相等。所以Set无法实现去重。

7.总结

实现数组的去重,要么通过元素对比,要么设置特殊标志识别。元素对比的思路有2种:一种是和原数组一一对比;另一种和新的数组对比。


如果要实现含对象的数组去重,一般使用遍历的方式,包括使用遍历类的方法(map、forEach、rece等)。像Set、sort等通过改变数组的方式一般是不可行的。

好了,

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

js数组去重复元素

常用的JS数组去重方法有哪些?。常用的JS数组去重方法有以下几种。1. 使用ES6的Set对象去重。Set是一种新的数据结构,其中的元素是唯一的,可以将数组转化为Set数据结构,然后再转回数组即可去重。2. 利用for嵌套for,然后splice去重。通过使用双重for循环结合数组的splice方法来实现数组去重,这是一种比较常用的方法。3. 利用indexOf去重。通过遍历数组,利用indexOf方法判断元素是否存在于新数组中,如果不存在则添加到新数组中。4. 利用对象的属性不能相同的特点进行去重。通过遍历数组,将数组元素作为对象的属性名和属性值,如果对象中已经存在该属性,则说明该元素重复。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top