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 相关文章推荐
重定向实现代码
Nov 20 Javascript
javascript算法学习(直接插入排序)
Apr 12 Javascript
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
Mar 08 Javascript
详解Javascript 装载和执行
Nov 17 Javascript
Javascript页面跳转常见实现方式汇总
Nov 28 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
angular之ng-template模板加载
Nov 09 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
Javascript Web Worker使用过程解析
Mar 16 Javascript
vuejs实现下拉框菜单选择
Oct 23 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浏览历史记录的方法
2015/03/10 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现从字典中删除元素的方法
2015/05/04 Python
Python使用minidom读写xml的方法
2015/06/03 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
JavaScript实例 ODO List分析
2022/01/22 Javascript