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 相关文章推荐
JavaScript 撑出页面文字换行
Jun 15 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
jQuery 仿百度输入标签插件附效果图
Jul 04 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 Javascript
JS for...in 遍历语句用法实例分析
Aug 24 Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
vue自动化表单实例分析
May 06 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
Jan 04 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 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 图片文件上传实现代码
2010/12/29 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
Destoon模板制作简明教程
2014/06/20 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
Angular1.x自定义指令实例详解
2017/03/01 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
node.js实现带进度条的多文件上传
2020/03/27 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
用Python实现换行符转换的脚本的教程
2015/04/16 Python
python网络编程之文件下载实例分析
2015/05/20 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python元组常见操作示例
2019/02/19 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
2014年秋季开学寄语
2014/08/02 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
入门学习Go的基本语法
2021/07/07 Golang