zoukankan      html  css  js  c++  java
  • js数组去重6法解析

    1,建个新数组,遍历老数组,若在新数组里没找到,则将这个元素放到新数组,然后返回

    Array.prototype.unique1 = function()
    
    {
    
    var n = [];
    
    for(var i = 0; i < this.length; i++)
    
    {
    
    if (n.indexOf(this[i]) == -1) n.push(this[i]);
    
    }
    
    return n;
    
    }

    2,利用hash表,将放到新数组的元素在hash表中存true值,下次遍历数组时检查元素在hash表中的值

    Array.prototype.unique2 = function()
    
    {
    
    var n = {},r=[];
    
    for(var i = 0; i < this.length; i++)
    
    {
    
    if (!n[this[i]])
    
    {
    
    n[this[i]] = true;
    
    r.push(this[i]);
    
    }
    
    }
    
    return r;
    
    }

    3,遍历老数组,若是这个第i项的元素的位置不是第i项,则是重复的,忽略掉

    Array.prototype.unique3 = function()
    
    {
    
    var n = [this[0]];
    
    for(var i = 1; i < this.length; i++)
    
    {
    
    if (this.indexOf(this[i]) == i) n.push(this[i]);
    
    }
    
    return n;
    
    }

    4,先将老数组排序,将老数组第一个放进新数组,老数组第二个与新数组第一个比较,若不一样则放进新数组中,若一样则是重复的,这种打乱原来的顺序了

    Array.prototype.unique4 = function()
    
    {
    
    this.sort();
    
    var re=[this[0]];
    
    for(var i = 1; i < this.length; i++)
    
    {
    
    if( this[i] !== re[re.length-1])
    
    {
    
    re.push(this[i]);
    
    }
    
    }
    
    return re;
    
    }

    5,新建一个将原数组排过序的新数组,对新数组进行排序,对应找到重复的元素位置,在原数组里删掉它

    Array.prototype.unique5 = function(){
    
        var self = this;
    
        var _a = this.concat().sort();
    
        _a.sort(function(a,b){
    
            if(a == b){
    
                var n = self.indexOf(a);
    
                self.splice(n,1);
    
            }
    
        });
    
        return self;
    
    };

    6,先把reduce方法分析下,arr.reduce(callback,[initialValue]) callback函数有4个参数,第一个参数previousValue,若是有初始值initialValue,则是初始值,若没有,则是数组中的第一个值,第二个currentValue是数组中当前被处理的元素,在新建数组中遍历老数组中的每个元素,若是没有,在新数组中加上

    Array.prototype.unique6 = function()
    
    {
    
    return this.reduce(function(p, c)
    
    {
    
    if (p.indexOf(c) < 0) p.push(c);
    
    return p;
    
    }, []);
    
    };

    一个10000个随机数的数组的六种测试用时:

    method 1 used 349ms

    method 2 used 5ms

    method 3 used 442ms

    method 4 used 15ms

    method 5 used 13ms

    method 6 used 424ms

    参考

    6 ways to get unique values of an Array in Javascript

    Array.prototype.reduce()

  • 相关阅读:
    Flask发送邮件
    python 可调用对象之类实例
    flask 跨域请求
    flask登录插件 flask-login
    flask 更新数据库
    python事物管理及同步锁
    Django signals 信号作用及用法说明
    python中各个response使用
    Ntp时间服务器
    Iptables-主机防火墙设置
  • 原文地址:https://www.cnblogs.com/jesse-band/p/4559144.html
Copyright © 2011-2022 走看看