zoukankan      html  css  js  c++  java
  • 数组去重

       数组去重在前端工作中是必不可少的,接下来我就总结了个人常用的几种方式

    一. ES5环境书写

    1. 传统方式:效率不是是很高

    var data = [1,3,2,1,2];
    Array.prototype.unique = function(){
    	for(var i=0,arr=[],len=this.length;i<len;i++){
    		var item = this[i];
    		if(arr.indexOf(item) == -1) arr.push(item);
    	}
    	return arr;
    };
    Array.prototype.indexOf = function(n){
    	for(var i=0,len=this.length;i<len;i++){
    		if(this[i] == n) return i; 
    	}
    	return -1;
    };
    console.log(data.unique());
    

    2.通过模拟map的hash存储方式:效率优于1

    var data = [1,3,2,1,2];
    Array.prototype.unique = function(){
    	for(var i=0,r={},n=[],len=this.length;i<len;i++){
    		if(!r[this[i]]){
    			r[this[i]] = true;
    			n.push(this[i]);
    		}  
    	}
    	return n;
    };
    console.log(data.unique());
    

    3.通过indexOf判断数组元素第一次出现的位置是否为当前位置来实现:效率是2的两倍,推荐

    var data = [1,3,2,1,2];
    Array.prototype.unique = function(){
    var arr = [this[0]];
         //从第二项开始遍历 for(var i=1,len=this.length;i<len;i++){
    //如果当前数组元素在数组中出现的第一次位置不是i,说明是重复元素 if(this.indexOf(this[i]) == i) arr.push(this[i]); } return arr; }; console.log(data.unique());

    二. ES6环境

    通过Set数据结构中,无重复元素的特性来实现:比较推崇

    var data = [1,3,2,1,2];
    let arr = [...new Set(data)];
    console.log(arr);
    
  • 相关阅读:
    测试发帖
    C# 四舍五入算法(转)
    赚钱,爱好,生活
    c# 当前dll目录
    BlogWriter
    调用com+时,提示 0x800706f7,error msg:占位程序接收到错误数据,(本地调用时提示:不支持此接口)
    测试2
    系统架构设计 & 避免循环引用(转载)
    Visual Studio 2008查找替换用的正则
    Myeclipse webinf/lib包加载问题
  • 原文地址:https://www.cnblogs.com/xfz1987/p/7591233.html
Copyright © 2011-2022 走看看