js數(shù)組去重的方法總結(jié)
一、普通的方法去重
1、簡(jiǎn)單的去重方法
// 最簡(jiǎn)單數(shù)組去重法 /* * 新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就push進(jìn)該新數(shù)組中 * IE8以下不支持?jǐn)?shù)組的indexOf方法 */ function uniq(array){ var temp = []; //一個(gè)新的臨時(shí)數(shù)組 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; } var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3] /* var newArray = ['mu','zi','dig','big','z','mu','zi','muzidigbig'] console.log(uniq(newArray));//["mu", "zi", "dig", "big", "z", "muzidigbig"] */
2、數(shù)組下標(biāo)法
/* * 還是得調(diào)用“indexOf”性能跟方法1差不多, * 實(shí)現(xiàn)思路:如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i, * 那么表示第i項(xiàng)是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組。 */ function uniq(array){ var temp = []; for(var i = 0; i < array.length; i++) { //如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置是i,才存入數(shù)組;否則代表是重復(fù)的 if(array.indexOf(array[i]) == i){ temp.push(array[i]) } } return temp; } var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));//[1, 2, "2", 4, 9, "a", 3, 5, 6]
3、排序后相鄰去除法
/* * 給傳入數(shù)組排序,排序后相同值相鄰, * 然后遍歷時(shí),新數(shù)組只加入不與前一值重復(fù)的值。 * 會(huì)打亂原來數(shù)組的順序 */ function uniq(array){ array.sort(); console.log(array.sort()); var temp=[array[0]]; for(var i = 1; i < array.length; i++){ if( array[i] !== temp[temp.length-1]){ temp.push(array[i]); } } return temp; } var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5]; console.log(uniq(aa));//[1, "2", 2, 3, 4, 5, 6, 9, "a"]
4、優(yōu)化遍歷數(shù)組法
// 思路:獲取沒重復(fù)的最右一值放入新數(shù)組 /* * 推薦的方法 * 方法的實(shí)現(xiàn)代碼相當(dāng)酷炫, * 實(shí)現(xiàn)思路:獲取沒重復(fù)的最右一值放入新數(shù)組。 * (檢測(cè)到有重復(fù)值時(shí)終止當(dāng)前循環(huán)同時(shí)進(jìn)入頂層循環(huán)的下一輪判斷) */ function uniq(array){ var temp = []; var index = []; var l = array.length; for(var i = 0; i < l; i++) { for(var j = i + 1; j < l; j++){ if (array[i] === array[j]){ i++; j = i; } } temp.push(array[i]); index.push(i); } console.log(index);//[0, 2, 5, 6, 7, 8, 9] return temp; } var aa = [1,2,2,3,5,3,6,5,'3','muzi']; console.log(uniq(aa));// [1, 2, 3, 6, 5, "3", "muzi"]
5.數(shù)組includes()去重
//利用數(shù)組原型對(duì)象上的includes方法 function unique(arr){ var bArr= []; for(var i=0; i<arr.length; i++){ if( !bArr.includes(arr[i]) ){ // 如果bArr新數(shù)組包含當(dāng)前循環(huán)item bArr.push(arr[i]); } } return bArr; } var aa = [1,2,2,3,5,3,6,5,'3','muzi']; console.log(unique(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
6.數(shù)組原型對(duì)象上的filter和includes方法
//利用數(shù)組原型對(duì)象上的filter和includes方法 function unique6(arr){ var bArr= []; bArr= arr.filter(function(item){ return bArr.includes(item) ? null : bArr.push(item); }); return bArr; } var aa = [1,2,2,3,5,3,6,5,'3','muzi']; console.log(unique6(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
7.數(shù)組原型對(duì)象上的forEach和includes方法
//利用數(shù)組原型對(duì)象上的forEach和includes方法 function unique7(arr){ var bArr= []; arr.forEach(function(item){ bArr.includes(item) ? null : bArr.push(item); }); return bArr; } var aa = [1,2,2,3,5,3,6,5,'3','muzi']; console.log(unique7(aa))//[1, 2, 3, 5, 6, "3", "muzi"]
二、原型對(duì)象去重
方法一:
思路:1)構(gòu)建一個(gè)臨時(shí)數(shù)組存放結(jié)果;
2)循環(huán)遍歷當(dāng)前數(shù)組,判斷當(dāng)前數(shù)組下標(biāo)為i的元素是否已經(jīng)保存在臨時(shí)數(shù)組,如果已保存,則跳過,否則將此元素保存到臨時(shí)數(shù)組中。
Array.prototype.method1 = function(){ var arr=[]; //定義一個(gè)臨時(shí)數(shù)組 for(var i = 0; i < this.length; i++){ //循環(huán)遍歷當(dāng)前數(shù)組 //判斷當(dāng)前數(shù)組下標(biāo)為i的元素是否已經(jīng)保存到臨時(shí)數(shù)組 //如果已保存,則跳過,否則將此元素保存到臨時(shí)數(shù)組中 if(arr.indexOf(this[i]) == -1){ arr.push(this[i]); } } return arr; }; var arrNum1 = [1,4,1,1,3,3,4,6,7,8,3,7,0,2,11,2,'muzi','digbig','muzi']; console.log(arrNum1.method1());//[1, 4, 3, 6, 7, 8, 0, 2, 11, "muzi", "digbig"]
三、es6去重
let arr = [1,2,2,3,4,4,4]; let s = new Set(arr); //結(jié)果:Set {1,2,3,4} let newArr = Array.from(s); //結(jié)果:[1,2,3,4],完成去重
若有不足請(qǐng)多多指教!希望給您帶來幫助!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- js數(shù)組去重的常用方法總結(jié)
- JS實(shí)現(xiàn)數(shù)組去重方法總結(jié)(六種方法)
- js數(shù)組去重的5種算法實(shí)現(xiàn)
- 高性能js數(shù)組去重(12種方法,史上最全)
- 史上最全JavaScript數(shù)組去重的十種方法(推薦)
- js實(shí)現(xiàn)數(shù)組去重、判斷數(shù)組以及對(duì)象中的內(nèi)容是否相同
- JavaScript數(shù)組去重的兩種方法推薦
- JS實(shí)現(xiàn)的合并多個(gè)數(shù)組去重算法示例
- JS實(shí)現(xiàn)的JSON數(shù)組去重算法示例
- JavaScript數(shù)組去重的五種方法
- js算法中的排序、數(shù)組去重詳細(xì)概述
- JS實(shí)現(xiàn)數(shù)組去重,顯示重復(fù)元素及個(gè)數(shù)的方法示例
- 兩個(gè)數(shù)組去重的JS代碼
- JS實(shí)現(xiàn)數(shù)組去重及數(shù)組內(nèi)對(duì)象去重功能示例
- JS實(shí)現(xiàn)的字符串?dāng)?shù)組去重功能小結(jié)
- JS實(shí)現(xiàn)字符串去重及數(shù)組去重的方法示例
- 關(guān)于js數(shù)組去重的問題小結(jié)
- JS數(shù)組去重的常用4種方法
相關(guān)文章
javascript中驗(yàn)證大寫字母、數(shù)字和中文
本文為大家介紹下使用javascript驗(yàn)證大寫字母小寫字母,數(shù)字和中文,具體示例如下2014-01-01微信小程序 拍照或從相冊(cè)選取圖片上傳代碼實(shí)例
這篇文章主要介紹了微信小程序 拍照或從相冊(cè)選取圖片上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08JS SetInterval 代碼實(shí)現(xiàn)頁面輪詢
setInterval 是一個(gè)實(shí)現(xiàn)定時(shí)調(diào)用的函數(shù),可按照指定的周期(以毫秒計(jì))來調(diào)用函數(shù)或計(jì)算表達(dá)式。下面通過本文給大家分享JS SetInterval 代碼實(shí)現(xiàn)頁面輪詢,感興趣的朋友一起看看吧2017-08-08JavaScript中你不得不知道的Promise高級(jí)用法分享
在JavaScript中,Promise是一種解決異步編程問題的重要方式,本文主要來和大家探討一下23個(gè)Promise的高級(jí)用法,每一個(gè)都在JavaScript的海洋中航行,讓開發(fā)者們能夠以更高效、優(yōu)雅的方式處理異步操作,希望對(duì)大就有所幫助2023-12-12js+css完成網(wǎng)站的會(huì)員照片信息顯示效果
js+css完成網(wǎng)站的經(jīng)典效果,一般用于會(huì)員排行榜中,會(huì)員信息的介紹,包括照片等。2010-06-06cocos2dx骨骼動(dòng)畫Armature源碼剖析(三)
本篇文章給大家分享cocos2dx骨骼動(dòng)畫Armature源碼剖析(三),代碼附有注釋,介紹的非常詳細(xì),需要的朋友可以參考下2015-09-09