JavaScript数组去重算法实例小结


Posted in Javascript onMay 07, 2018

本文实例总结了JavaScript数组去重算法。分享给大家供大家参考,具体如下:

测试用例:

arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":20},""];

方法一:借助于临时数组与indexOf , 算法复杂度为:O(n^2)

function unique1(arr){
  var temp = [];
  for(var i=0; i<arr.length; i++){
    if(temp.indexOf(arr[i]) == -1){
      temp.push(arr[i]);
    }
  }
  return temp;
}

测试结果:

unique1(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, Object { name="li", age=20}, ""]

bug 无法区分对象

方法二 : 用JavaScript中的Object对象来当作哈希表

function unique2(arr){
  var temp=[];
  var hash={};
  for(var i=0; i<arr.length;i++){
    if(!hash[arr[i]]){
      hash[arr[i]]=true;
      temp.push(arr[i]);
    }
  }
  return temp;
}

测试结果:

unique2(arr) : ["1", 3, 4, 5, "2", Object { name="li", age=20}, ""]

bug : 无法区分: 1 和 "1"

修改

function unique2(arr){
  var temp=[];
  var hash={};
  for(var i=0; i<arr.length;i++){
      var item = arr[i];
    var key = typeof(item)+item;
    if(!hash[key]){
      hash[key]=true;
      temp.push(arr[i]);
    }
  }
  return temp;
}

测试结果:

unique2(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, ""]

方法三:先用sort对数组排序,然后借助临时数组,存储相同元素的最后一个,该方法只能用于纯Number类型数组

function unique3(arr){
  arr.sort(function(a,b){
    return a-b;
  });
  var temp = [];
  for(var i=0;i<arr.length;i++){
    if(arr[i] !== arr[i+1]){
      temp.push(arr[i]);
    }
  }
  return temp;
}
Javascript 相关文章推荐
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
Nov 20 Javascript
用console.table()调试javascript
Sep 04 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
微信小程序新手教程之启动页的重要性
Mar 03 Javascript
layui prompt 设置允许空白提交的方法
Sep 24 Javascript
JavaScript大数相加相乘的实现方法实例
Oct 18 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 #Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 #Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
May 07 #Javascript
Vue 实现树形视图数据功能
May 07 #Javascript
JavaScript 跨域之POST实现方法
May 07 #Javascript
ES6关于Promise的用法详解
May 07 #Javascript
React Form组件的实现封装杂谈
May 07 #Javascript
You might like
php中的时间处理
2006/10/09 PHP
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
PHP学习笔记之一
2011/01/17 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
php5.3 注意事项说明
2013/07/01 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
JavaScript 调试器简介
2009/02/21 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
等待指定时间后自动跳转或关闭当前页面的js代码
2013/07/09 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
Python设计模式之策略模式实例详解
2019/01/21 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python count函数使用方法实例解析
2020/03/23 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
python 带时区的日期格式化操作
2020/10/23 Python
python3访问字典里的值实例方法
2020/11/18 Python
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
办公室文员工作自我评价
2013/12/01 职场文书
表扬信格式
2014/01/12 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
初一学生期末评语
2014/04/24 职场文书
实习计划书范文
2015/01/16 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python