數(shù)組去重

請(qǐng)看下面數(shù)組,其中的元素有多次重復(fù),請(qǐng)寫一個(gè)函數(shù)來(lái)實(shí)現(xiàn)去除數(shù)組中重復(fù)的元素。
<script>
    let arr = [1, 1, 2, '2', 3, 4, 5, 6, 6, 7, 8, 9, 0, "a", "a", "b"];


    Array.prototype.unique = function () {
        let newArr = [],
            len = this.length,
            flag = true

        for (let i = len - 1; i >= 0; i--) {
            for (let j = 0; j < newArr.length; j++) {
                if (this[i] === newArr[j]) {
                    flag = false
                    break
                } else {
                    flag = true
                }
            }

            if (flag) {
                newArr.push(this[i])
            }
        }
        return newArr.reverse()
    }
使用with改進(jìn)
    Array.prototype.unique1 = function () {
        let newArr = [],
            flag = true,
            i = this.length,
            j = 0

        while (--i >= 0) {
            j = newArr.length
            while (--j >= 0) {
                flag = this[i] !== newArr[j]
                if (!flag) {
                    break
                }
            }
            flag && newArr.push(this[i])
        }
        return newArr.reverse()
    }
對(duì)象去除法
    Array.prototype.unique2 = function () {
        let newArr = [],
            obj = {},
            len = this.length

        for (let i = len - 1; i > 0; i--) {
            obj[this[i]] = ""
        }
        for (let key in obj) {
            newArr.push(key)
        }
        return newArr
    }

    //優(yōu)化對(duì)象去除法
    Array.prototype.unique3 = function () { //這種情況下無(wú)法判斷數(shù)組中元素的類型,如果不能去除不同類型的重復(fù)則需要改進(jìn)
        let newArr = [],
            obj = {},
            len = this.length

        for (let i = len - 1; i > 0; i--) {
            if (obj[this[i]] == undefined) {
                obj[this[i]] = ""
                newArr.push(this[i])
            }
        }
        return newArr.reverse()
    }

    //改進(jìn)可判數(shù)據(jù)類型
    Array.prototype.unique4 = function () { //這種情況下無(wú)法判斷數(shù)組中元素的類型,如果不能去除不同類型的重復(fù)則需要改進(jìn)
        let newArr = [],
            obj = {},
            len = this.length

        for (let i = len - 1; i > 0; i--) {
            if (obj[this[i]] == undefined || obj[this[i]] !== this[i]) {
                obj[this[i]] = this[i]
                newArr.push(this[i])
            }
        }
        return newArr.reverse()
    }

    Array.prototype.unique5 = function () {
        let newArr = [],
            obj = {},
            i = this.length

        while (--i) {
            (obj[this[i] == undefined] || obj[this[i]] !== this[i]) && (obj[this[i]] = this[i], newArr.push(this[i]))
        }

        return newArr.reverse()
    }
通過(guò)正則實(shí)現(xiàn)去重
    Array.prototype.unique6 = function () {
        let newArr = [],
            arr1 = []

        arr1 = arr.join(',').match(/([^\,]+)(?!.*\1)/ig)
        arr1.forEach(item => {
            /[a-zA-z]/.test(item) ? newArr.push(item) : newArr.push(parseInt(item))
        })

        return newArr
    }

    console.log(arr.unique6())
</script>
通過(guò)數(shù)組indexOF方法實(shí)現(xiàn)去重
    Array.prototype.unique7 = function(){
        var arr = []
        for(var i=0; i<this.length; i++){
            if(arr.indexOf(this[i]) === -1){
                arr.push(this[i])
            }
        }
        return arr
    }
    
    var a = [1,2,3,3,2,1,42,3]
    
    var c = a.unique2()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容