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基本对象
Jan 11 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
Jul 29 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
js实现网站最上边可关闭的浮动广告条代码
Sep 04 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
Dec 30 Javascript
javascript 开发之百度地图使用到的js函数整理
May 19 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 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实例分享之二维数组排序
2014/05/15 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
BootStrap fileinput.js文件上传组件实例代码
2017/02/20 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
在django模板中实现超链接配置
2019/08/21 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
安全协议书范本
2014/04/21 职场文书
委托证明书
2014/09/17 职场文书
平面设计师岗位职责
2014/09/18 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python