91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript怎么找出數組中的重復或非重復元素

發布時間:2022-02-07 15:43:52 來源:億速云 閱讀:446 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“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

concat 本身就可以給數組降維一次

function reduceDiemension(arr){
    const res = []
    for(let i = 0;i < arr.length;i++){
        res = res.concat(arr[i])
    }
    return res
}

二維數組:reduce + concat

上面的過程本身是一種歸并,所以考慮使用 reduce

function flatten(arr){
    return arr.reduce((acc,cur) => acc.concat(cur),[])
}

二維數組:展開 / apply + concat

通過展開原數組或者將其作為 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

數組降維可以看作是把所有的括弧都去掉,而數組的 toString 方法剛好可以做這個事,之后再調用字符串的 split 把字符串轉換回數組即可。但這個方法很局限,要求數組元素的數據類型都相同。

function flattern_numberArray(arr){
    return arr.toString().split(",").map(x => Number)
}

多維數組:forEach + 遞歸

function flatten(arr){
    const res = []
    arr.forEach(item => {
        if(Array.isArray(item)){
            flatten(item)
        } else {
            res.push(item)
        }
    })
    return res
}

多維數組:reduce + 遞歸

同理,上面的過程是一種歸并,可以使用 reduce 完成。需要注意的是,reduce 的回調函數必須返回一個數組,所以不要再用 push

function flatten(arr){
    return arr.reduce((acc,cur) => {
        if(Array.isArray(cur)){
            return [...acc , ...flatten(cur)]    
        } else {
            return [...acc,cur]
        }
    },[])
}

多維數組:while + some

只要數組中還有數組,就使用 concat 給這個數組降維。這個方法可以不使用遞歸

function flatten(arr){    
    while(arr.some(item => Array.isArray(item))){
        arr = [].concat(...arr)
    }
    return arr
}

不確定維數的數組: flat

數組降維,直接用之前講過的 flat 是最簡單的。默認傳參 1,表示降維一次;可以傳參 Infinity,實現完全降維,最終得到一個一維數組。

讀到這里,這篇“JavaScript怎么找出數組中的重復或非重復元素”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉安县| 西宁市| 含山县| 麦盖提县| 二手房| 商洛市| 富宁县| 大丰市| 安康市| 商水县| 手游| 蒙城县| 兴安县| 定日县| 玉树县| 河西区| 余姚市| 宁乡县| 巩义市| 文昌市| 马关县| 汝城县| 九江市| 承德市| 墨江| 广平县| 左贡县| 常宁市| 云霄县| 娄烦县| 龙门县| 南宫市| 郑州市| 合阳县| 郓城县| 隆子县| 五原县| 荥阳市| 洛川县| 花莲县| 平原县|