JavaScript中數(shù)組雙重去重的方法總結(jié)
方式一循環(huán)法去重
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } //設(shè)置初始值為空數(shù)組 var res = [] //數(shù)組遍歷 for (let i = 0; i < arr.length; i++) { //設(shè)置一個初始值 let flag = true //繼續(xù)二次遍歷 如果值相同 就不放入新數(shù)組 for (let j = 0; j < res.length; j++) { if (arr[i] === res[j]) { flag = false break } } if (flag) { res.push(arr[i]) } //當(dāng)flag1為true的時候 數(shù)組push } return res } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
[1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
暴力去重法是一種去重方式 但是復(fù)雜度上面會顯得特別的復(fù)雜 雙重for循環(huán)可以優(yōu)化
方式二indexof去重
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } //設(shè)置初始值為空數(shù)組 var res = [] //數(shù)組遍歷 for (let i = 0; i < arr.length; i++) { //只要這個值在數(shù)組中是唯一出現(xiàn)就push到新數(shù)組里面 if(res.indexOf(arr[i])===-1){ res.push(arr[i]) } } return res } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
[1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
通過該值為數(shù)組中的唯一下標(biāo)進(jìn)行判斷 從而獲取到相應(yīng)的一個值
方式三filter去重
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } //元素在數(shù)組中第一次出現(xiàn)的位置是否和元素現(xiàn)在的位置相等 return Array.prototype.filter.call(arr,function(item,index){ console.log(arr.indexOf(item),item,index) return arr.indexOf(item)===index }) } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
0 1 0
數(shù)組去重的第二種方式220313.html:24 1 2 1
數(shù)組去重的第二種方式220313.html:24 2 3 2
數(shù)組去重的第二種方式220313.html:24 3 4 3
數(shù)組去重的第二種方式220313.html:24 4 6 4
數(shù)組去重的第二種方式220313.html:24 5 7 5
數(shù)組去重的第二種方式220313.html:24 0 1 6
數(shù)組去重的第二種方式220313.html:24 1 2 7
數(shù)組去重的第二種方式220313.html:24 2 3 8
數(shù)組去重的第二種方式220313.html:24 9 8 9
數(shù)組去重的第二種方式220313.html:24 10 9 10
數(shù)組去重的第二種方式220313.html:30 (8) [1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
利用indexOf檢測元素在數(shù)組中第一次出現(xiàn)的位置是否和元素現(xiàn)在的位置相等,如果不等則說明該元素是重復(fù)元素
方式四先排序在對比
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } //先對數(shù)組進(jìn)行排序 arr = arr.sort() console.log(arr,"arr") //判斷相鄰得元素是不是相等 如果不相等就放進(jìn)數(shù)組里面去 let res = [] for (let i = 0; i < arr.length; i++) { if (arr[i] !== arr[i - 1]) { res.push(arr[i]) } } return res } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
(11) [1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9] 'arr'
數(shù)組去重方式第四種220314.html:44 (8) [1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
通過先排序在對相鄰得元素進(jìn)行判斷獲取到對應(yīng)得數(shù)據(jù)結(jié)果
方式五對象屬性去重
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } let res = [], obj = {} //如果對象的屬性值不存在 就放進(jìn)去 不然就賦值+1 for (let i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { res.push(arr[i]) obj[arr[i]] = 1 console.log( obj[arr[i]],"obj[arr[i]]") } else { obj[arr[i]]++ console.log( obj[arr[i]],"obj[arr[j]]") } } return res } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
[1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
如果對象的屬性值不存在 就放進(jìn)去 不然就賦值1 否則賦值2
方式六set去重
實現(xiàn)代碼
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9] function ArrayCommon(arr) { //判斷是不是數(shù)組 不是數(shù)組就返回一個false if (!Array.isArray(arr)) { console.log('這不是一個數(shù)組哦') return } return [...new Set(arr)] } console.log(ArrayCommon(geyao, 'geyao'))
運行結(jié)果
[1, 2, 3, 4, 6, 7, 8, 9]
總結(jié)
通過new set直接進(jìn)行去重了
到此這篇關(guān)于JavaScript中數(shù)組雙重去重的方法總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript數(shù)組雙重去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javaScript實現(xiàn)可縮放的顯示區(qū)效果代碼
這篇文章主要介紹了javaScript實現(xiàn)可縮放的顯示區(qū)效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)事件動態(tài)操作頁面元素屬性的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10uniapp跨頁面?zhèn)髦祏ni.$emit和uni.$on的使用及踩坑實戰(zhàn)
使用uni.$emit觸發(fā)事件后,對應(yīng)的uni.$on就會監(jiān)聽到事件觸發(fā),在回調(diào)中去執(zhí)行相關(guān)的邏輯,下面這篇文章主要給大家介紹了關(guān)于uniapp跨頁面?zhèn)髦祏ni.$emit和uni.$on的使用及踩坑實戰(zhàn)的相關(guān)資料,需要的朋友可以參考下2023-04-04JS應(yīng)用正則表達(dá)式轉(zhuǎn)換大小寫示例
這篇文章主要介紹了JS應(yīng)用正則表達(dá)式轉(zhuǎn)換大小寫,以首字母大寫,其它字母小寫為例,喜歡的朋友可以參考下2014-09-09JavaScript?Promise執(zhí)行流程深刻理解
這篇文章主要介紹了JavaScript?Promise執(zhí)行流程深刻理解,他是一個構(gòu)造函數(shù),每個創(chuàng)建的promise都有各自狀態(tài)和值,且狀態(tài)初始值為pending,值為undefined2022-06-06基于JavaScript實現(xiàn)一定時間后去執(zhí)行一個函數(shù)
在實際需要中可能需要規(guī)定在指定的時間之后再去執(zhí)行一個函數(shù)以達(dá)成期望的目的,這也就是一個定時器效果,本文給大家介紹基于JavaScript實現(xiàn)一定時間后去執(zhí)行一個函數(shù)的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧2015-12-12