下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第JavaScript中數(shù)組去重常用的五種方法詳解目錄1.對象屬性(indexof)2.newSet(數(shù)組)3.newMap()4.filter()+indexof5.reduce()+includes補充原數(shù)組
constarr=[1,1,1,17,true,true,false,false,true,a,{},{}];
1.對象屬性(indexof)
利用對象屬性key排除重復項
遍歷數(shù)組,每次判斷新數(shù)組中是否存在該屬性,不存在就存儲在新數(shù)組中
并把數(shù)組元素作為key,最后返回新數(shù)組
這個方法的優(yōu)點是效率高,缺點是使用了額外空間
varnewArr
=[];
arr.forEach((key,index)={
if(newArr.indexOf(key)===-1){
newArr.push(key)
console.log(newArr);//
[1,'1',17,true,false,'true','a',{},{}]
2.newSet(數(shù)組)
Set是一系列無序、沒有重復值的數(shù)據(jù)集合,傳入一個需要去重的數(shù)組,Set會自動刪除重復的元素
再將Set轉數(shù)組返回。此方法效率高,代碼清晰,缺點是存在兼容性問題
constnewArr=[...newSet(arr)];
console.log(newArr);//[1,'1',17,true,false,'true','a',{},{}]
3.newMap()
利用Map的鍵值對同名覆蓋,再將Map轉數(shù)組
constm=newMap();
for(leti=0;iarr.length;i++){
m.set(arr[i],arr[i]);
constnewArr=[]
m.forEach(function(value,key){
newArr.push(value)
console.log(newArr);//[1,'1',17,true,false,'true','a',{},{}]
4.filter()+indexof
filter把接收的函數(shù)依次作用于每一個數(shù)組項,然后根據(jù)返回值trueorfalse決定是否保留該值
優(yōu)點在于可在去重時插入對元素的操作,可拓展性強
constnewArr=arr.filter(function(item,index,self){
returnself.indexOf(item)===index;
console.log(newArr);//
[1,'1',17,true,false,'true','a',{},{}]
5.reduce()+includes
reduce()把結果繼續(xù)和序列的下一個元素做累加計算
利用reduce遍歷和傳入一個空數(shù)組作為去重后的新數(shù)組,然后內部判斷新數(shù)組中是否存在當前遍歷的元素,不存在就插入新數(shù)組
缺點在于時間消耗多,內存空間也額外占用
constnewArray=arr.reduce((newArr,element)={
if(!newArr.includes(element)){
newArr.push(element);
returnnewArr;
},[]);
注意點:
在數(shù)據(jù)量較低時,以上五個方法無較為明顯的區(qū)別(10000條)
高于10000條時,前兩種方法時間消耗最少,后三種時間消耗依次增加
第一種方法空間占用多,當下很多項目不再考慮低版本游覽器兼容性問題
推薦使用Set()去重方法
補充
當然實現(xiàn)數(shù)組去重還有很多其他的方法,下面小編為大家整理了一些
利用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))
hasOwnProperty
functionunique(arr){
varobj={};
returnarr.filter(function(item,index,arr){
returnobj.hasOwnProperty(typeofitem+item)false:(obj[typeofitem+item]=true)
}
利用遞歸去重
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,然后數(shù)組去重
}
}
loop(len-1);
returnarray;
}
vararr=[1,1,'true','true',tr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030物聯(lián)網(wǎng)平臺應用場景適用性用戶體驗隱私保護行業(yè)競爭標準化
- 2025-2030物流行業(yè)自動化設備應用與倉儲布局優(yōu)化及效率提升研究
- 學生腿部皮膚護理方案
- 白酒市場操作方案
- 精神分裂癥長效針劑路徑的成本效果分析
- 精準預防策略的健康風險評估工具
- 精準營養(yǎng)與藥物相互作用的臨床管理
- 精準康復:基于功能評估的個性化方案
- 精準醫(yī)療靶點選擇的臨床研究終點優(yōu)化策略體系構建體系
- 精準醫(yī)療醫(yī)保支付的健康管理創(chuàng)新
- 《實踐論》《矛盾論》導讀課件
- 中試基地運營管理制度
- 老年病康復訓練治療講課件
- DB4201-T 617-2020 武漢市架空管線容貌管理技術規(guī)范
- 藥品追溯碼管理制度
- 腳手架國際化標準下的發(fā)展趨勢
- 購銷合同范本(塘渣)8篇
- 生鮮業(yè)務采購合同協(xié)議
- GB/T 4340.2-2025金屬材料維氏硬度試驗第2部分:硬度計的檢驗與校準
- 銷售合同評審管理制度
- 資產(chǎn)評估員工管理制度
評論
0/150
提交評論