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 相关文章推荐
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
javascript实现简单的Map示例介绍
Dec 23 Javascript
window.open 以post方式传递参数示例代码
Feb 27 Javascript
javascript实现信息增删改查的方法
Jul 25 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
Aug 25 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
OpenLayers3实现地图显示功能
Sep 25 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的十大要点(上)
2009/02/04 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python实现的简单算术游戏实例
2015/05/26 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Python实现统计代码行的方法分析
2017/07/12 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
python属于跨平台语言码
2020/06/09 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
Python LMDB库的使用示例
2021/02/14 Python
英国电子专家:maplin
2019/09/04 全球购物
给导游的表扬信
2014/01/10 职场文书
学生会主席演讲稿
2014/04/25 职场文书
个人买房协议书范本
2014/10/06 职场文书
出生证明格式
2015/06/15 职场文书
务工证明怎么写
2015/06/18 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
Python实现智慧校园自动评教全新版
2021/06/18 Python
Python实现照片卡通化
2021/12/06 Python
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers