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封装的一个js分页
Nov 15 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
json数据与字符串的相互转化示例
Sep 18 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
Nov 30 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
jquery及js实现动态加载js文件的方法
Jan 21 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
在页面中输出当前客户端时间javascript实例代码
Mar 02 Javascript
基于javascript实现tab选项卡切换特效调试笔记
Mar 30 Javascript
用js编写留言板
Mar 17 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
Jan 15 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
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
python七夕浪漫表白源码
2019/04/05 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
简单的辞职信范文
2014/01/18 职场文书
小区文明倡议书
2014/05/16 职场文书
应届生面试求职信
2014/07/02 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
孩子教育的心得体会
2014/09/01 职场文书
中学生自我评价范文
2015/03/03 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书