12種解決數(shù)組去重的方案

兜個(gè)小圈 先總結(jié)一下我們數(shù)組的方法:
pop
push
shift
unshift
slice
splice
sort
reverse
concot
join
indexOf
lastIndexOf
map
forEach
還有其他可以處理數(shù)組的幾個(gè)方法~
– includes:返回一個(gè)布爾值,如果存在返回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)皮!!哈哈哈哈哈哈)
01、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);
02、對(duì)象屬性名不能重復(fù)
let arr = [12,1,12,3,1,88,66,9,66];function unique(ary) {let obj = {};for(let i=0;ilet 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);
03、indexOf
let arr = [12,1,12,3,1,88,66,9,66];function unique(ary) {let newAry = [];for(let i=0;ilet cur = ary[i];if(newAry.indexOf(cur)===-1){newAry.push(cur);}}return newAry;}unique(arr)
04、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;iif(a[i]===a[i+1]){a.splice(i+1,1);i--;}}return a;}unique(arr)
05、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;ilet cur = ary[i];if(!newAry.includes(cur)){newAry.push(cur);}}return newAry;}console.log(unique(arr));
06、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))
07、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));
08、splice
let arr = [12,1,12,3,1,88,66,9,66];function unique(ary) {for(let i=0;ifor(j=i+1;jif(ary[i]===ary[j]){ary.splice(j,1);j--;}}}return ary;}unique(arr);
09、遞歸
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));
10、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;iif(!map.has(ary[i])){map.set(ary[i],true);newAry.push(ary[i]);}}}unique(arr);
11、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));
12、類似于方法一的set,用了剩余運(yùn)算符…
let arr = [12,1,12,3,1,88,66,9,66];let a = [...new Set(arr)];console.log(a);

評(píng)論
圖片
表情
