首页 > 编程 > JavaScript > 正文

总结Javascript中数组各种去重的方法

2019-11-20 08:49:31
字体:
来源:转载
供稿:网友

前言

在做javascript开发的时候,经常会遇到数组元素重复的问题,而javascript Array又没有直接提供方法解决此问题,还需要自己去实现。这篇文章总结了Javascript中数组各种去重的方法,下面来一起看看。

方法一 利用对象属性不重复的特性

Array.prototype.distinct = function (){  var arr = this,    i,    obj = {},    result = [],    len = arr.length;  for(i = 0; i< arr.length; i++){    if(!obj[arr[i]]){  //如果能查找到,证明数组元素重复了      obj[arr[i]] = 1;      result.push(arr[i]);    }  }  return result;};

方法二 双层循环,外层循环元素,内层循环时比较值

Array.prototype.distinct = function(){  var arr = this,    result = [],    i,    j,    len = arr.length;  for(i = 0; i < len; i++){    for(j = i + 1; j < len; j++){      if(arr[i] === arr[j]){        j = ++i;      }    }    result.push(arr[i]);  }  return result;}

方法三 数组递归去重

Array.prototype.distinct = function (){  var arr = this,    len = arr.length;  arr.sort(function(a,b){    //对数组进行排序才能方便比较    return a - b;  })  function loop(index){    if(index >= 1){      if(arr[index] === arr[index-1]){        arr.splice(index,1);      }      loop(index - 1);  //递归loop函数进行去重    }  }  loop(len-1);  return arr;};

方法四 利用indexOf以及forEach

Array.prototype.distinct = function (){  var arr = this,    result = [],    len = arr.length;  arr.forEach(function(v, i ,arr){    //这里利用map,filter方法也可以实现    var bool = arr.indexOf(v,i+1);    //从传入参数的下一个索引值开始寻找是否存在重复    if(bool === -1){      result.push(v);    }  })  return result;};

方法五 利用ES6的set

function dedupe(array){  return Array.from(new Set(array));}dedupe([1,1,2,3]) //[1,2,3]

方法六 拓展运算符(…)内部使用for…of循环

let arr = [3,5,2,2,5,5];let unique = [...new Set(arr)];  //[3,5,2]

总结

好了,以上就是这篇文章的全部内容了,个人比较喜欢使用方法一,不会对原数组进行修改,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表