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调用XML制作连动下拉列表框
Jun 25 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
js表头排序实现方法
Jan 16 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
javascript实现淘宝幻灯片广告展示效果
Apr 27 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 Javascript
JS回调函数简单易懂的入门实例分析
Sep 29 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
YII框架中使用memcache的方法详解
2017/08/02 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
原生js实现分页效果
2020/09/23 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Django 解决由save方法引发的错误
2020/05/21 Python
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
西式婚礼主持词
2014/03/13 职场文书
大学生个人求职信例文
2014/07/07 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
优秀大学生申请书
2019/06/24 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
python游戏开发之pygame实现接球小游戏
2022/04/22 Python