欢迎使用CSDN-markdown编辑器

来源:互联网 发布:重庆西南大学网络学费 编辑:程序博客网 时间:2024/05/17 01:30

四种常见的数组去重方法与执行效率分析

 //数组去重的方法1  Array.prototype.unique1 = function(){    var arr = [];  //声明结果数组    var json = {};  //声明一个hash对象    for(var i=0; i<this.length; i++){      if(!json[this[i]]){ //如果hash对象没有当前数组中的值,则添加当前元素到hash对象中,并push到结果数组中        arr.push(this[i]);        json[this[i]] = 1;      }    }    return arr; //返回结果数组  }  //数组去重方法2  Array.prototype.unique2 = function(){    //声明一个结果数组    var arrTotal = [this[0]];    //遍历要去重的数组    var len = this.length;    for(var i=0; i<len; i++){      //遍历储存数组,查看当前元素是否在结果数组中      for(var j=0; j<arrTotal.length; j++){        //若结果数组没有该元素,则将该元素push到结果数组中        if(arrTotal.indexOf(this[i]) == -1){          arrTotal.push(this[i]);        }      }    }    return arrTotal;  //返回结果数组  }  //数组去重方法三  Array.prototype.unique3 = function(){    //将原数组进行排序    this.sort();    //声明一个结果数组    var res = [this[0]];    var len = this.length;    for(var i=0; i<len; i++){      if(this[i] != res[res.length-1]){ //如果当前元素与结果元素的最后一个元素不相等,        res.push(this[i]);  //则把当前元素添加到结果数组中      }    }    return res; //返回结果数组  }  //数组去重方法四  Array.prototype.unique4 = function(){    var res = [this[0]];  //此处的this是调用这个方法的数组    for(var i=1; i<this.length; i++){      if(arr.indexOf(this[i]) == i){  //如果当前元素第一次出现的位置等于该元素的下标值        res.push(this[i]) // 添加到结果数组中      }    }    return res; //返回结果数组  }最后调用这四种方法:首先声明一个数组变量var arr = [0, 30, 20, 1, 2, 3, 4, 5, 6, 7, 6, 544, 43, 2, 22, 1, 1, 1, 2451, 3, 48];console.log(arr.unique1());console.log(arr.unique2());console.log(arr.unique3());console.log(arr.unique4());打印出结果如下:[0, 30, 20, 1, 2, 3, 4, 5, 6, 7, 544, 43, 22, 48][0, 30, 20, 1, 2, 3, 4, 5, 6, 7, 544, 43, 22, 48][0, 1, 2, 20, 22, 3, 30, 4, 43, 48, 5, 544, 6, 7][0, 1, 2, 20, 22, 3, 30, 4, 43, 48, 5, 544, 6, 7]

效率分析:

方法2和方法4用到了indexOf方法,该方法会遍历数组,可以理解为我们要找出一个小偷藏在一栋楼的哪个房间,需要每个房间的去查找,而在hash对象中查找元素很简单,可以理解为我们拿着门牌号直接去抓小偷,建议使用方法1和方法3!!

欢迎各位童鞋交流前端开发各种问题!