zoukankan      html  css  js  c++  java
  • JavaScript 数据去重的常用几种方法

    方案一:利用数组的indexOf(一)

    原理

    先声明一个空数组,然后循环数组成员,利用了数组的indexOf方法去判断当前成员是否存在新数组内,如果不存在则push进去,最后返回新数组得到一个去重后的数组!

    代码如下

    Array.prototype.unique = function() {
        var newArr = [],
            i = 0,
            len = this.length;
        for (; i < len; i++) {
            var tempArr = this[i];
            if(newArr.indexOf(tempArr) === -1){
                newArr.push(tempArr);
            }
        }
        return newArr;
    };
    

    方案二:利用数组的indexOf方法(二)

    原理

    创建一个新数组并插入第一个元素,再对数组进行轮询,判断当前元素在数组中的位置,如果不为 i 则表示在数组中已经存在,则不添加!

    代码如下:

    Array.prototype.unique = function() {
        var newArr = [this[0]],
            i = 1,
            len = this.length;
        for (; i < len; i++) {
            var tempArr = this[i];
            if(this.indexOf(tempArr) === i){
                newArr.push(tempArr);
            }
        }
        return newArr;
    };
    

    方案三:利用对象的hash值

    原理:

    创建一个obj对象,用于存放当前值得值,对数组进行轮询,判断当前值在obj对象中的值,如果不存在则添加!该方法利用了对象的hash进行了性能上的提升!相对前面两种该方法性能更高一点!

    代码如下:

    Array.prototype.unique = function() {
        var obj = {},
            newArr = [],
            i = 0,
            len = this.length;
        for (; i < len; i++) {
            var tempArr = this[i];
            if (!obj[tempArr]) {
                obj[tempArr] = true;
                newArr.push(tempArr);
            }
        }
        return newArr;
    };
    

    方案四:利用数组排序进行去重

    原理

    先对数组进行排序,调用了数组内部的sort方法。然后对数组进行轮询,判断当前元素是不是新数组的最后一项,如果不是则表示是第一次添加,直接push进去,否则跳过。

    代码如下:

    Array.prototype.unique = function() {
        this.sort();
        var newArr = [this[0]],
            i = 0,
            len = this.length;
        for (; i < len; i++) {
            var tempArr = this[i];
            if(tempArr !== newArr[newArr.length -1]){
                newArr.push(tempArr);
            }
        }
        return newArr;
    };
    

    方案五:利用正则匹配进行去重

    原理

    先将数组转换成指定符号分割的字符串,然后进行一系列的替换操作,最后split成新的数组。(注意:原来数组成员类型为int的经过该操作后会变成string类型,慎用!!!!)

    代码如下:

    Array.prototype.unique = function() {
        return this.sort().join(",,").replace(/(,|^)([^,]+)(,,2)+(,|$)/g, "$1$2$4").replace(/,,+/g, ",").replace(/,$/, "").split(",");
    }
    
  • 相关阅读:
    CF1168B Good Triple 性质分析
    bzoj 4994: [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组_排序
    BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机+栈
    BZOJ 1691 [Usaco2007 Dec]挑剔的美食家 multiset+排序+贪心
    BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压动归
    BZOJ 1726: [Usaco2006 Nov]Roadblocks第二短路 Dijkstra
    BZOJ 1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏 幼儿园测试题
    BZOJ 5508: [Tjoi2019]甲苯先生的字符串 矩阵乘法_思维
    BZOJ 1602: [Usaco2008 Oct]牧场行走 倍增裸题
    描述符get/set/delete,init/new/call,元类
  • 原文地址:https://www.cnblogs.com/mangoniki/p/5838218.html
Copyright © 2011-2022 走看看