数组去重

作者: 饥人谷_米弥轮 | 来源:发表于2017-11-14 18:30 被阅读13次
请看下面数组,其中的元素有多次重复,请写一个函数来实现去除数组中重复的元素。
<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改进
    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()
    }
对象去除法
    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
    }

    //优化对象去除法
    Array.prototype.unique3 = function () { //这种情况下无法判断数组中元素的类型,如果不能去除不同类型的重复则需要改进
        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()
    }

    //改进可判数据类型
    Array.prototype.unique4 = function () { //这种情况下无法判断数组中元素的类型,如果不能去除不同类型的重复则需要改进
        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()
    }
通过正则实现去重
    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>
通过数组indexOF方法实现去重
    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()

相关文章

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

  • 数组去重

    传统方法 ES6 扩展 传统方法 最后再写到 Array.prototype 原型中

  • 数组去重

    老题了。。虽然网上一搜一大堆,还是自己想了想,自己动笔写了几种。

网友评论

    本文标题:数组去重

    本文链接:https://www.haomeiwen.com/subject/dpifvxtx.html