您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“JavaScript怎么找出數組中的重復或非重復元素”,內容詳細,步驟清晰,細節處理妥當,希望這篇“JavaScript怎么找出數組中的重復或非重復元素”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
雙重循環 + slice,找出重復的元素。雖然只要求找出重復元素,但應該注意要順便去重,否則外循環還是會對重復元素進行一遍檢查;用 flag 記錄重復次數,只在第一次重復的時候將元素放入新數組
function search(arr){ let res = [] let flag = 0 for(let i = 0;i < arr.length;i++){ for(let j = i+1;j<arr.length;j++){ if(arr[i] === arr[j]){ flag++ if(flag == 1) res.push(arr[i]) arr.splice(j,1) } } flag = 0 } return res }
map + filter
,記錄每個元素出現的次數。有了重復次數,就可以篩選出重復元素、重復次數最多元素或者非重復元素:
function search(arr){ const map = new Map() for(item of arr){ if(!map.has(item)){ map.set(item,1) } else { map.set(item,map.get(item)+1) } } // 找出重復元素,即出現次數大于1 return [...map.entries()].filter(item => item[1] > 1).map(item => item[0]) // 找出非重復元素,即出現次數等于1 return [...map.entries()].filter(item => item[1] == 1).map(item => item[0]) // 找出重復次數最多的元素 return [...map.entries()] .filter(item => item[1] == Math.max(...map.values())) .map(item => item[0]) }
二維數組,以[[],[{a:1}],[],[3,4],5]
為例,降維后得到[{a:1},3,4,5]
需要檢查是否每個元素都是數組
function flatten(arr){ const res = [] for(let i = 0;i < arr.length; i++){ if(Array.isArray(arr[i])){ for(let j = 0;j < arr[i].length;j++){ res.push(arr[i][j]) } } else { res.push(arr[i]) } } return res }
concat
本身就可以給數組降維一次
function reduceDiemension(arr){ const res = [] for(let i = 0;i < arr.length;i++){ res = res.concat(arr[i]) } return res }
上面的過程本身是一種歸并,所以考慮使用 reduce
function flatten(arr){ return arr.reduce((acc,cur) => acc.concat(cur),[]) }
通過展開原數組或者將其作為 apply
的第二個參數,把數組轉化為一個參數列表
function flatten(arr){ // return [].concat([],arr) return [].concat(...arr) }
多維數組,以下面的數組為例:
const arr = [
1,
[
2,[3],
[4,5,6],
[7,8,9],
10,11
],
12,
13,
[15,16,17]
]
降維后得到 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17]
數組降維可以看作是把所有的括弧都去掉,而數組的 toString
方法剛好可以做這個事,之后再調用字符串的 split 把字符串轉換回數組即可。但這個方法很局限,要求數組元素的數據類型都相同。
function flattern_numberArray(arr){ return arr.toString().split(",").map(x => Number) }
function flatten(arr){ const res = [] arr.forEach(item => { if(Array.isArray(item)){ flatten(item) } else { res.push(item) } }) return res }
同理,上面的過程是一種歸并,可以使用 reduce
完成。需要注意的是,reduce
的回調函數必須返回一個數組,所以不要再用 push
了
function flatten(arr){ return arr.reduce((acc,cur) => { if(Array.isArray(cur)){ return [...acc , ...flatten(cur)] } else { return [...acc,cur] } },[]) }
只要數組中還有數組,就使用 concat
給這個數組降維。這個方法可以不使用遞歸
function flatten(arr){ while(arr.some(item => Array.isArray(item))){ arr = [].concat(...arr) } return arr }
數組降維,直接用之前講過的 flat
是最簡單的。默認傳參 1,表示降維一次;可以傳參 Infinity,實現完全降維,最終得到一個一維數組。
讀到這里,這篇“JavaScript怎么找出數組中的重復或非重復元素”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。