js数组去重的方法汇总


Posted in Javascript onJuly 29, 2015

三种方法

利用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 tmpArr;
 }

利用indexOf判断旧数组

function unique2(arr){
  var tmpArr = []; //结果数组
  for(var i=0; i<arr.length; i++){
   //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
   //那么表示第i项是重复的,忽略掉。否则存入结果数组
   if(arr.indexOf(arr[i]) == i){
    tmpArr.push(arr[i]);
   }
  }
  return tmpArr;
 }

利用hash查找

这里利用了JS对象的实现就是hash表的特性

function unique3(arr){
  var tmpArr = [], hash = {};//hash为hash表
  for(var i=0;i<arr.length;i++){
   if(!hash[arr[i]]){//如果hash表中没有当前项
    hash[arr[i]] = true;//存入hash表
    tmpArr.push(arr[i]);//存入临时数组
   }
  }
  return tmpArr;
 }

数组扩展

Array.prototype.unique1 = function (){
  var tmpArr = []; 
  for (var i = 0; i < this.length; i++){
   if (tmpArr.indexOf(this[i]) == -1){
    tmpArr.push(this[i]);
   }
  }
  return tmpArr;
 }

 Array.prototype.unique2 = function(){
   var tmpArr = []; //结果数组
   for(var i = 0; i < this.length; i++){
    if (this.indexOf(this[i]) == i){
     tmpArr.push(this[i]);
    }
   }
   return tmpArr;
 }

 Array.prototype.unique3 = function(){
   var tmpArr=[], hash = {};
   for(var i = 0; i < this.length; i++){
    if (!hash[this[i]]){
      hash[this[i]] = true; 
      tmpArr.push(this[i]); 
    }
   }
   return tmpArr;
 }

使用Set

Set和Map是ES6中新增的数据结构
Set直接可以存储不重复的一组key,这个key也可以是对象,字符串等
创建set

var s = new Set([1, 2, 3,]);
s; // Set {1, 2, 3}

新增元素

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}//重复元素不会被添加

删除元素

s; // Set {1, 2, 3, 4}
s.delete(3);
s; // Set {1, 2, 4}

遍历元素

Map和Set无法使用下标
ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型

var s = new Set(['A', 'B', 'C']);

for (var x of s) { // 遍历Set
  alert(x);
}

或者直接使用iterable内置的forEach方法
forEach方法是ES5.1标准引入的

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, set) {
  alert(element);
});

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
JS中==与===操作符的比较
Mar 21 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
Apr 03 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
js打造数组转json函数
Jan 14 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
纯JS代码实现一键分享功能
Apr 20 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
纯JS实现轮播图
Feb 22 Javascript
vue params、query传参使用详解
Sep 12 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
Apr 28 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 #Javascript
JavaScript中的cacheStorage使用详解
Jul 29 #Javascript
JavaScript中数组继承的简单示例
Jul 29 #Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 #Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 #Javascript
浅谈Javascript数组的使用
Jul 29 #Javascript
举例讲解Node.js中的Writable对象
Jul 29 #Javascript
You might like
又一个php 分页类实现代码
2009/12/03 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
javascript常用方法总结
2015/05/14 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
Angular实现响应式表单
2017/08/04 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
使用JavaScript破解web
2018/09/28 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
Python实现统计文本文件字数的方法
2017/05/05 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
个人自我鉴定写法
2013/11/30 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
暑假安全保证书
2015/02/28 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
心术观后感
2015/06/11 职场文书
单位证明范文
2015/06/18 职场文书