UDN-企业互联网技术人气社区

板块导航

浏览  : 675
回复  : 2

[原生js] js数组去重的三种常用方法总结

[复制链接]
刘莉莉11的头像 楼主
发表于 2017-1-3 13:01:04 | 显示全部楼层 |阅读模式
  本篇文章主要是对js数组去重的三种常用方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

  第一种是比较常规的方法
  
  思路
  
  1.构建一个新的数组存放结果
  
  2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
  
  3.若结果数组中没有该元素,则存到结果数组中
  
  复制代码 代码如下:

  1. Array.prototype.unique1 = function(){
  2.  var res = [this[0]];
  3.  for(var i = 1; i < this.length; i++){
  4.   var repeat = false;
  5.   for(var j = 0; j < res.length; j++){
  6.    if(this[i] == res[j]){
  7.     repeat = true;
  8.     break;
  9.    }
  10.   }
  11.   if(!repeat){
  12.    res.push(this[i]);
  13.   }
  14.  }
  15.  return res;
  16. }
  17. var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
  18. alert(arr.unique1());
复制代码

  第二种方法比上面的方法效率要高
  
  思路:
  
  1.先将原数组进行排序
  
  2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
  
  3.如果不相同,则将该元素存入结果数组中
  
  复制代码 代码如下:

  1. Array.prototype.unique2 = function(){
  2.  this.sort(); //先排序
  3.  var res = [this[0]];
  4.  for(var i = 1; i < this.length; i++){
  5.   if(this[i] !== res[res.length - 1]){
  6.    res.push(this[i]);
  7.   }
  8.  }
  9.  return res;
  10. }
  11. var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
  12. alert(arr.unique2());
复制代码

  第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
  
  第三种方法(推荐使用)
  
  思路:
  
  1.创建一个新的数组存放结果
  
  2.创建一个空对象
  
  3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
  
  说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

  1. Array.prototype.unique3 = function(){
  2.  var res = [];
  3.  var json = {};
  4.  for(var i = 0; i < this.length; i++){
  5.   if(!json[this[i]]){
  6.    res.push(this[i]);
  7.    json[this[i]] = 1;
  8.   }
  9.  }
  10.  return res;
  11. }
  12. var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
  13. alert(arr.unique3());
复制代码


发表于 2017-1-3 13:01:34 来自手机 | 显示全部楼层
我完全是被标题<<js数组去重的三种常用方法总结>>吸引过来的
使用道具 举报

回复

发表于 2017-1-9 16:34:32 | 显示全部楼层
经常看到”刘莉莉11“发帖,辛苦了
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部