js数组去重的三种常用方法总结

 本篇文章主要是对js数组去重的三种常用方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

第一种是比较常规的方法
 
思路:
 
1.构建一个新的数组存放结果
 
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
 
3.若结果数组中没有该元素,则存到结果数组中
 代码如下:
Array.prototype.unique1 = function(){
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  var repeat = false;
  for(var j = 0; j < res.length; j++){
   if(this[i] == res[j]){
    repeat = true;
    break;
   }
  }
  if(!repeat){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1());
 
第二种方法比上面的方法效率要高
 
思路:
 
1.先将原数组进行排序
 
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
 
3.如果不相同,则将该元素存入结果数组中
 
代码如下:
Array.prototype.unique2 = function(){
 this.sort(); //先排序
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  if(this[i] !== res[res.length - 1]){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());
 
第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
 
第三种方法(推荐使用)
 
思路:
 
1.创建一个新的数组存放结果
 
2.创建一个空对象
 
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
 
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
 
 
复制代码 代码如下:
Array.prototype.unique3 = function(){
 var res = [];
 var json = {};
 for(var i = 0; i < this.length; i++){
  if(!json[this[i]]){
   res.push(this[i]);
   json[this[i]] = 1;
  }
 }
 return res;
}
 
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());

时间: 2024-08-09 19:12:06

js数组去重的三种常用方法总结的相关文章

js数组去重的三种常用方法总结_javascript技巧

第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中 复制代码 代码如下: Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){  var repeat = false;  for(var j = 0; j < res.lengt

js数组去重的4个方法

原文:js数组去重的4个方法 面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项.据我所知,百度.腾讯.盛大等都在面试里出过这个题目. 这个问题看起来简单,但是其实暗藏杀机. 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解.     我总共想出了三种算法来实现这个目的: Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i < this.length;

javascript数组去重的三种常用方法,及其性能比较

在进行数组操作时往往会遇到去掉重复项的问题,下面简单介绍下数组去重的方法,以及其执行效率  方法一         采用两次循环         原理:拿当前的和他后面的比,如果后面的有重复的就干掉         但是我们发现数组最后一项,后面没有东西,那他就不用和后边的比较了,所以我们只要循环arr.length-1次就可以了 var arr=[1,3,5,3,5,3,4,1,3,5,3,5,3,41,3,5,3,5,3,4,1,3,5,3,5,3,4];                fo

js 数组去重的四种实用方法_javascript技巧

面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项.据我所知,百度.腾讯.盛大等都在面试里出过这个题目.这个问题看起来简单,但是其实暗藏杀机. 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解. 我总共想出了三种算法来实现这个目的: Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i < this.length; i++) //遍历当前数组 { //如

js数组去重的方法汇总_javascript技巧

三种方法 利用indexOf判断新数组 underscore.js中实际上也是使用的类似的indexOf //传入数组 function unique1(arr){ var tmpArr = []; for(var i=0; i<arr.length; i++){ //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if(tmpArr.indexOf(arr[i]) == -1){ tmpArr.push(arr[i]); } } return tmp

关于js数组去重的问题小结

 在项目开发过程中经常会遇到数组中包含很多重复的内容,即脏数据去脏的操作,本文着重讲解了数组去重的几种方法.需要的朋友可以过来参考下,希望对大家有所帮助 1.根据js对象中key不重复的原则,构思出数组去重的方法,按照最常规的思维如下:   代码如下: function distinctArray(arr){ var obj={},temp=[]; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ temp.push(arr[i]); obj[ar

JS数组去重与取重的示例代码

 本篇文章主要是对JS数组去重与取重的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 方法一:去重复数据 代码如下: <script> Array.prototype.distinct=function(){ var a=[],b=[]; for(var prop in this){    var d = this[prop];    if (d===a[prop]) continue; //防止循环到prototype    if (b[d]!=1){     a.push

js数组去重的5种算法实现_javascript技巧

1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){ var n = []; //一个新的临时数组 //遍历当前数组 for(var i = 0; i < array.length; i++){ //如果当前数组的第i已

常用的js数组去重最优方法整理

第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中  代码如下 复制代码 Array.prototype.unique1 = function(){  var res = [this[0]];  for(var i = 1; i < this.length; i++){   var repeat = false;   for(var j = 0; j < res.l