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 相关文章推荐
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
Sep 27 Javascript
javascript 面向对象编程 function也是类
Sep 17 Javascript
html a标签-超链接中confirm方法使用介绍
Jan 04 Javascript
node.js中的fs.symlink方法使用说明
Dec 15 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
Nov 17 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
Nov 24 Javascript
JavaScript设计模式初探
Jan 07 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
TypeScript中的方法重载详解
Apr 12 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 Javascript
简述Vue中容易被忽视的知识点
Dec 09 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 5.4 你必须要知道的
2013/08/07 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
Python datetime模块的使用示例
2021/02/02 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
汉语言文学毕业生求职信
2013/10/01 职场文书
花卉与景观设计系大学生求职信
2013/10/01 职场文书
区域总监的岗位职责
2013/11/21 职场文书
优秀实习自我鉴定
2013/12/04 职场文书
我爱我校演讲稿
2014/05/21 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS