




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第JS實現數組去重的11種方法總結目錄1.ES5常用:利用for嵌套for,然后splice去重2.ES6常用:Set去重3.indexOf去重4.sort()排序5.對象屬性不能相同(不建議)6.includes()7.hasOwnProperty8.filter9.利用遞歸去重10.Map去重11.reduce+includes
1.ES5常用:利用for嵌套for,然后splice去重
functionunique(arr){
for(vari=0;iarr.length;i++){
for(varj=i+1;jarr.length;j++){
if(arr[i]==arr[j]){//第一個等同于第二個,splice方法刪除第二個
arr.splice(j,1);
j--;
returnarr;
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:兩個null消失,NaN和{}沒有去重
2.ES6常用:Set去重
functionunique(arr){
returnArray.from(newSet(arr))
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:去重代碼少。但是無法去除{}空對象。
3.indexOf去重
functionunique(arr){
if(!Array.isArray(arr)){
console.log('typeerror!')
return
vararray=[];//新建空數組,for循環原數組,判斷數組是否存在當前元素,如果相同的值跳過,不同push進數組
for(vari=0;iarr.length;i++){
if(array.indexOf(arr[i])===-1){
array.push(arr[i])
returnarray;
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:NaN、{}沒有去重
4.sort()排序
//排序后的結果,遍歷對比
functionunique(arr){
if(!Array.isArray(arr)){
console.log('typeerror!')
return
arr=arr.sort()
vararrray=[arr[0]];
for(vari=0;iarr.length;i++){
if(arr[i]!==arr[i-1]){
arrray.push(arr[i]);
returnarrray
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:NaN、{}沒有去重
5.對象屬性不能相同(不建議)
functionunique(arr){
if(!Array.isArray(arr)){
console.log('typeerror!')
return
vararray=[];
varobj={};
for(vari=0;iarr.length;i++){
if(!obj[arr[i]]){
array.push(arr[i])
obj[arr[i]]=1
}else{
obj[arr[i]]++
returnarray;
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:兩個true去掉,NaN和{}沒有去重
6.includes()
functionunique(arr){
if(!Array.isArray(arr)){
console.log('typeerror!')
return
vararray=[];
for(vari=0;iarr.length;i++){
if(!array.includes(arr[i])){//includes檢測數組是否有某個值
array.push(arr[i]);
returnarray
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:{}沒有去重
7.hasOwnProperty
functionunique(arr){
varobj={};
returnarr.filter(function(item,index,arr){
returnobj.hasOwnProperty(typeofitem+item)false:(obj[typeofitem+item]=true)
}
解析:所有都去重
8.filter
functionunique(arr){
returnarr.filter(function(item,index,arr){
//當前元素,在原始數組中的第一個索引==當前索引值,否則返回當前元素
returnarr.indexOf(item,0)===index;
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(unique(arr))
解析:{}沒有去重、NaN兩個都沒有了
9.利用遞歸去重
functionunique(arr){
vararray=arr;
varlen=array.length;
array.sort(function(a,b){//排序后更加方便去重
returna-b;
})
functionloop(index){
if(index=1){
if(array[index]===array[index-1]){
array.splice(index,1);
}
loop(index-1);//遞歸loop,然后數組去重
}
}
loop(len-1);
returnarray;
}
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
];
console.log(unique(arr))
解析:NaN和{}沒有去重
10.Map去重
functionarrayNonRepeatfy(arr){
letmap=newMap();
letarray=newArray();//數組用于返回結果
for(leti=0;iarr.length;i++){
if(map.has(arr[i])){//如果有該key值
map.set(arr[i],true);
}else{
map.set(arr[i],false);//如果沒有該key值
array.push(arr[i]);
returnarray;
vararr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,
'NaN',0,0,'a','a',{},{}
console.log(arrayNonRepeatfy(arr))
解析:創建一個空Map數據結構,遍歷需要去重的數組,把數組的每一個元素作為key存到Map中。由于Map中不會出現相同的key值,所以最終得到的就是去重后的結果。{}空對象無法去重。
11.reduce+includes
functionunique(arr){
returnarr.reduce((prev,cur)=prev.includes(cur)prev:[...prev,cur],
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物料分揀試題及答案
- 中醫肺癌試題及答案
- java楊輝三角是面試題及答案
- 加多寶管培生面試題及答案
- 超聲影像考試題及答案
- 門診實操考試題及答案
- 民生銀行上海面試題及答案
- 電梯遇險急救課件
- 校園動物行為觀察與研究項目培養
- 共同出資協議書模板
- 2025年高考全國二卷英語高考真題
- 2025屆新高三英語組高效備考方法分享心得體會
- 湖南中醫藥大學招聘考試真題2024
- 2025AI時代健康睡眠白皮書
- 肥胖醫學營養治療
- 股權質押融資與境外投資合作協議
- 汽油清凈性評價 汽油機進氣閥沉積物模擬試驗法 編制說明
- 2025廣州市黃埔區輔警考試試卷真題
- 西寧市湟中縣2025年數學三下期末考試試題含解析
- 食品標鑒知識培訓課件
- 測繪成果保密管理制度
評論
0/150
提交評論