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 相关文章推荐
JQuery的一些小应用收集
Mar 27 Javascript
chrome下jq width()方法取值为0的解决方法
May 26 Javascript
简介JavaScript中getUTCMonth()方法的使用
Jun 10 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
前端js文件合并的三种方式推荐
May 19 Javascript
Node.js使用NodeMailer发送邮件实例代码
Mar 06 Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
angular $watch 一个变量的变化(实例讲解)
Aug 02 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
了解重排与重绘
May 29 Javascript
返回上一个url并刷新界面的js代码
Sep 12 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
一周学会PHP(视频)Http下载
2006/12/12 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python 创建一维的0向量实例
2019/12/02 Python
python批量处理txt文件的实例代码
2020/01/13 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
预备党员入党思想汇报
2014/01/04 职场文书
2014年德育工作总结
2014/11/20 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python