JavaScript數(shù)組去重方案
還有其他可以處理數(shù)組的幾個(gè)方法~
- includes
:方法用來(lái)判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況,如果包含則返回 true,否則返回false。
- find
:返回第一次找到的那一項(xiàng)
- some
:返回一個(gè)布爾值,只要一個(gè)是true
,就返回true
- every
:返回一個(gè)布爾值,需要每一項(xiàng)都是true,才返回true
- filter
:返回一個(gè)過(guò)濾后的新數(shù)組;如果返回true就留下,false就過(guò)濾掉
- reduce
:收斂
下面我們進(jìn)入正題~(希望能對(duì)你有幫助~小編有點(diǎn)皮??!哈哈哈哈哈哈)
方法一:set :不是一種數(shù)據(jù)類型,是一種數(shù)據(jù)結(jié)構(gòu);成員唯一
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let s = new Set(ary); // Array.from : 將set數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)成真正的數(shù)組; return Array.from(s) } unique(arr);
方法二:對(duì)象屬性名不能重復(fù)
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let obj = {}; for(let i=0;i<ary.length;i++){ let cur = ary[i]; if(obj[cur]){ //ary.splice(i,1);// 導(dǎo)致數(shù)組塌陷 ary[i]=ary[ary.length-1]; ary.length--;// 刪除最后一項(xiàng) i--; continue; } obj[cur]=cur;// 給obj新增鍵值對(duì);屬性名和屬性值是一樣的 } } unique(arr);
方法三:indexOf
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let newAry = []; for(let i=0;i<ary.length;i++){ let cur = ary[i]; if(newAry.indexOf(cur)===-1){ newAry.push(cur); } } return newAry; } unique(arr)
方法四:sort
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let a = ary.sort(function (a,b) { return a-b; }); for(let i=0;i<a.length;i++){ if(a[i]===a[i+1]){ a.splice(i+1,1); i--; } } return a; } unique(arr)
方法五:includes :包含;如果數(shù)組包含那一項(xiàng),返回true;不包含返回false;
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let newAry = []; let len = ary.length; for(let i=0;i<len;i++){ let cur = ary[i]; if(!newAry.includes(cur)){ newAry.push(cur); } } return newAry; } console.log(unique(arr));
方法六:hasOwnProperty : 檢測(cè)屬性名是否是對(duì)象的一個(gè)私有屬性;返回一個(gè)布爾值;
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let obj = {}; return ary.filter(function (item,index,a) { // item : 數(shù)組每一個(gè)成員 // index: 成員對(duì)應(yīng)的索引 // a : 整個(gè)數(shù)組 // hasOwnProperty來(lái)校驗(yàn)的該屬性是否出現(xiàn)過(guò); return obj.hasOwnProperty(typeof item+item)?false:obj[typeof item+item]=true; if(obj.hasOwnProperty(typeof item+item)){ return false }else{ obj[typeof item+item]=true; return true; } }) } console.log(unique(arr))
方法七:filter+indexOf
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { return ary.filter(function (item,index,a) { return ary.indexOf(item)===index; }) } console.log(unique(arr));
方法八:splice
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { for(let i=0;i<ary.length;i++){ for(j=i+1;j<ary.length;j++){ if(ary[i]===ary[j]){ ary.splice(j,1); j--; } } } return ary; } unique(arr);
方法九:遞歸
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let len= ary.length; ary = ary.sort(function (a,b) { return a-b; }); function loop(index) { if(index>=1){ if(ary[index]===ary[index-1]){ ary.splice(index,1); } loop(index-1) } } loop(len-1); return ary; } console.log(unique(arr));
方法十:Map :利用了Map數(shù)據(jù)結(jié)構(gòu)存值的特點(diǎn);
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { let newAry =[]; let map = new Map(); for(let i=0;i<ary.length;i++){ if(!map.has(ary[i])){ map.set(ary[i],true); newAry.push(ary[i]); } } } unique(arr);
方法十一:reduce
let arr = [12,1,12,3,1,88,66,9,66]; function unique(ary) { // reduce : 第一個(gè)是函數(shù),第二個(gè)參數(shù)會(huì)傳給第一次回調(diào)的prev; return ary.reduce((prev,next)=>{ // 該函數(shù)返回值是下一次執(zhí)行的prev; return prev.includes(next)?prev:[...prev,next]; },[]) } console.log(unique(arr));
方法十二:類似于方法一的set,用了剩余運(yùn)算符...
let arr = [12,1,12,3,1,88,66,9,66]; let a = [...new Set(arr)]; console.log(a);
到此這篇關(guān)于JS數(shù)組方案的文章就介紹到這了,更多相關(guān)JS數(shù)組去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript前端學(xué)算法題解LeetCode最大重復(fù)子字符串
這篇文章主要為大家介紹了JavaScript前端學(xué)算法題解LeetCode最大重復(fù)子字符串,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09微信小程序 數(shù)組中的push與concat的區(qū)別
這篇文章主要介紹了微信小程序 數(shù)組中的push與concat的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-01-01項(xiàng)目中使用TypeScript的TodoList實(shí)例詳解
這篇文章主要為大家介紹了項(xiàng)目中使用TypeScript的TodoList實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01在JavaScript實(shí)例對(duì)象中改寫(xiě)原型方法詳情
這篇文章主要介紹了在JavaScript實(shí)例對(duì)象中改寫(xiě)原型方法的一下相關(guān)資料,需要的效果版可以參考一下文章詳細(xì)內(nèi)容,希望對(duì)你有所幫助2021-10-10JavaScript?Canvas實(shí)現(xiàn)兼容IE的兔子發(fā)射爆破動(dòng)圖特效
這篇文章主要為大家介紹了JavaScript?Canvas實(shí)現(xiàn)兼容IE的兔子發(fā)射爆破動(dòng)圖特效示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01關(guān)于js typeof 與 instanceof 判斷數(shù)據(jù)類型區(qū)別及開(kāi)發(fā)使用
我們經(jīng)常會(huì)遇到判斷一個(gè)變量的數(shù)據(jù)類型或該變量是否為空值的情況,你是如何去選擇判斷類型操作符的?本文來(lái)記錄一下我們開(kāi)發(fā)人員必須掌握關(guān)于 typeof 和 instanceof 的知識(shí)點(diǎn)及在開(kāi)發(fā)中的使用建議,同時(shí)在面試過(guò)程中也經(jīng)常會(huì)遇到這樣的問(wèn)題,需要的朋友可參考下文章內(nèi)容2021-10-10微信小程序 獲取javascript 里的數(shù)據(jù)
這篇文章主要介紹了微信小程序 獲取javascript 里的數(shù)據(jù)的相關(guān)資料,這里通過(guò)實(shí)例來(lái)說(shuō)明如何獲取javascript里的數(shù)據(jù),希望能幫助到大家,需要的朋友可以參考下2017-08-08