數組去重的多種姿勢(複習必看)

一、寫在前面

       說起數組去重我們都不陌生,但是基本每次就說出來一二種,現在把它總結一下,方便我的後續複習。

二、具體算法實現

1、使用ES6新的數據結構,set它是不包含重複值的,但是要轉化爲數組,通過Array.from或者使用拓展運算符

function unique4(arr) {
    return Array.from(new set(arr))
}

2、使用indexof (返回第一個出現的下標,若沒有返回-1)

function unique(arr) {
    var newArr = []
    for (let i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i])
        }
    }
    return newArr
}

3、將數組排序後,依次比較前後的數字是否相等,不相等的push進新數組

function unique1(arr) {
    var sortArr = arr.sort()
    var newArr = []
    for (let i = 0; i < arr.length; i++) {
        if ((sortArr[i] !== sortArr[i - 1])) {
            newArr.push(sortArr[i])
        }
    }
    return newArr;
}

4、使用新的ES6特性includes,如果包含的話,返回true,

function unique2(arr) {
    var newArr = []
    for (let i = 0; i < arr.length; i++) {
        if (!newArr.includes(arr[i])) {
            newArr.push(arr[i])
        }
    }
}

5、使用foreach來進行遍歷

function unipue5() {
    const newarr = []
    this.forEach((item) => {
        if (!newarr.includes(item)) {
            newarr.push(item)
        }
    })
    return newarr
}

6、使用filter進行判斷過濾

function unique(arr) {
    var newarr = []
    newarr = arr.filter(function(item) {
        return newarr.includes(item) ? '' : newarr.push(item)
    })
    return newarr
}

7、使用map

function unique8() {
    const tmp = new Map()
    const newarr = []
    for (let i = 0; i < arr.length; i++) {
        if (!tmp.has(arr[i])) {
            tmp.set(arr[i], 1)
            newarr.push(arr[i])
        }
    }
}

8、使用對象的特性

function unique3(arr) {
    var obj = {}
    var newArr = []
    for (let i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) {
            obj[arr[i]] = 1
            newArr.push(arr[i])
        }
    }
    return newArr
}

有更好的解法,歡迎留言呀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章