全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript数组去重的多种方法(四种)

数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过 === 比较返回 true 的视为相同元素,需要去重,所以,1 和 "1" 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素(引用不同)。(当然如果需求认为 {} 和 {} 算作相同的元素,那么解法就不一样了)

method 1

使用两重循环

function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
  var item = arr[i];
  for(var j = 0, jLen = res.length; j<jLen; j++) {
   if(item == res[j]) break;
  }
  if(j == jLen) res.push(item);
 }
 return res;
}

method 2

function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (ret.indexOf(item) === -1) {
  ret.push(item)
 }
 }
 return ret
}

这里判断可以使用一个语法糖

function unique(arr) {
 var res = [];
 for(var i = 0, len = arr.length;i < len; i++) {
  var item = arr[i];
  (res.indexOf(item) === -1) && res.push(item);
 }
 return res;
}

但是在低版本浏览器并没有 indexOf

var indexOf = [].indexOf ?
 function(arr, item) {
  return arr.indexOf(item)
 } :
 function indexOf(arr, item) {
  for (var i = 0; i < arr.length; i++) {
  if (arr[i] === item) {
   return i
  }
  }
  return -1
 }
function unique(arr) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
 var item = arr[i]
 if (indexOf(ret, item) === -1) {
  ret.push(item)
 }
 }
 return ret
}

method3

使用两重循环的另外一种比较方式,前面是将原数组的元素和结果数组一一比较,下面我们可以将原数组的重复元素的最后一个元素放入数组中

function unique(arr) {
 var ret = [];
 var len = arr.length;
 var isRepeat;
 for(var i=0; i<len; i++) {
  isRepeat = false;
  for(var j=i+1; j<len; j++) {
   if(arr[i] === arr[j]){
    isRepeat = true;
    break;
   }
  }
  if(!isRepeat){
   ret.push(arr[i]);
  }
 }
 return ret;
}

这里还有一个优化的版本

function unique(a) {
 var res = [];
 for (var i = 0, len = a.length; i < len; i++) {
 for (var j = i + 1; j < len; j++) {
  // 这一步十分巧妙
  // 如果发现相同元素
  // 则 i 自增进入下一个循环比较
  if (a[i] === a[j])
  j = ++i; //j = i = i + 1;
 }
 res.push(a[i]);
 }
 return res;
}

method4

用 javascript 中的 object 对象来当作 哈希表

function dedup(arr) {
 var hashTable = {};
 return arr.filter(function(value,index,arr){
  var key = JSON.stringify(value);
  var match = Boolean(hashTable[key]);
  return (match ? false : hashTable[key] = true);
 });
}

因为 Object 的 key 值都是 String 类型,所以对于 1 和 "1" 无法分别,我们可以稍微改进下,将类型也存入 key 中

function dedup(arr) {
 var ret = [];
 var hash = {};
 for(var i = 0; i < arr.length; i++) {
  var item = arr[i];
  var key = typeof(item) + item;
  if(hash[key] !== 1) {
   ret.push(item)
   hash[key] = 1;
  }
 }
 return ret;
}

总结

以上所述是小编给大家介绍的JavaScript数组去重的多种方法(四种),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js  # 数组去重  # JavaScript数组去重的两种方法推荐  # JavaScript数组去重的五种方法  # js数组去重的5种算法实现  # javascript数组去重的六种方法汇总  # js数组去重的方法汇总  # JS数组去重与取重的示例代码  # 关于js数组去重的问题小结  # js数组去重的常用方法总结  # 两个数组去重的JS代码  # 我们可以  # 小编  # 将原  # 都是  # 给你  # 在此  # 给大家  # 还有一个  # 可以使用  # 四种  # 所述  # 给我留言  # 感谢大家  # 版本浏览器  # 组中  # 疑问请  # 有任何  # 样了  # 但是在  # 这一步 


相关文章: 网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何基于云服务器快速搭建网站及云盘系统?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  建站之星安装后如何自定义网站颜色与字体?  制作网站公司那家好,网络公司是做什么的?  如何在云主机上快速搭建多站点网站?  已有域名能否直接搭建网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  魔毅自助建站系统:模板定制与SEO优化一键生成指南  建站主机选购指南:核心配置优化与品牌推荐方案  宝塔Windows建站如何避免显示默认IIS页面?  一键网站制作软件,义乌购一件代发流程?  如何在云虚拟主机上快速搭建个人网站?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  c# 在高并发场景下,委托和接口调用的性能对比  如何正确选择百度移动适配建站域名?  家具网站制作软件,家具厂怎么跑业务?  建站之星如何快速生成多端适配网站?  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  制作网页的网站有哪些,电脑上怎么做网页?  三星网站视频制作教程下载,三星w23网页如何全屏?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  微信小程序制作网站有哪些,微信小程序需要做网站吗?  表情包在线制作网站免费,表情包怎么弄?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何通过虚拟主机快速完成网站搭建?  寿县云建站:智能SEO优化与多行业模板快速上线指南  制作农业网站的软件,比较好的农业网站推荐一下?  如何用美橙互联一键搭建多站合一网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  网站制作软件有哪些,制图软件有哪些?  如何选择适合PHP云建站的开源框架?  Python如何创建带属性的XML节点  大学网站设计制作软件有哪些,如何将网站制作成自己app?  5种Android数据存储方式汇总  如何通过万网虚拟主机快速搭建网站?  如何快速辨别茅台真假?关键步骤解析  香港服务器选型指南:免备案配置与高效建站方案解析  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何用PHP快速搭建高效网站?分步指南  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何通过免费商城建站系统源码自定义网站主题与功能?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何基于云服务器快速搭建个人网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。