




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第JS實現(xiàn)數組去重的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循環(huán)原數組,判斷數組是否存在當前元素,如果相同的值跳過,不同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))
解析:創(chuàng)建一個空Map數據結構,遍歷需要去重的數組,把數組的每一個元素作為key存到Map中。由于Map中不會出現(xiàn)相同的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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 系統(tǒng)集成項目管理工程師試題及答案
- 煤礦招生考試題庫及答案
- 2025年網絡設計師考試網絡技術知識點及試題及答案
- 2025年設計師考試綜合考點配置
- 洛貝林的試題及答案
- 委托養(yǎng)豬合同協(xié)議書范本
- 2025地板合作合同模板
- 公司鉗工比賽試題及答案
- 系統(tǒng)分析師考試實戰(zhàn)技能試題及答案
- 網絡知識試題及答案
- 2024-2025學年七年級下學期英語人教版(2024)期末達標測試卷A卷(含解析)
- 2025年河南省鄭州市中原區(qū)中考數學第三次聯(lián)考試卷
- 《法律文書情境訓練》課件-第一審民事判決書的寫作(上)
- 廣告宣傳服務方案投標文件(技術方案)
- 烘焙設備智能化升級行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 基于新課標的初中英語單元整體教學設計與實踐
- 《我的削筆刀》教學設計 -2023-2024學年科學一年級上冊青島版
- 細胞培養(yǎng)技術考核試題及答案
- 2025分布式光伏工程驗收標準規(guī)范
- 2025-2030全球及中國高壓側開關行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025年北師大版數學六年級下冊期末復習計劃
評論
0/150
提交評論