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一点特殊用法
May 28 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
微信小程序实现刷脸登录
May 25 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 Javascript
解决Layui中templet中a的onclick参数传递的问题
Sep 20 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 Javascript
JS前端基于canvas给图片添加水印
Nov 11 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
itchat接口使用示例
2017/10/23 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
python判断元素是否存在的实例方法
2020/09/24 Python
临床医学大学生求职信
2013/09/28 职场文书
医院总经理岗位职责
2014/02/04 职场文书
绩效工资实施方案
2014/03/15 职场文书
教师评语大全
2014/04/28 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
车辆管理制度范本
2015/08/05 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python