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 相关文章推荐
javascript中的一些注意事项 更新中
Dec 06 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
AngularJs定制样式插入到ueditor中的问题小结
Aug 01 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
Sep 18 Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 Javascript
原生js实现弹窗消息动画
Nov 20 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中防止SQL注入的最佳解决方法
2013/04/25 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
Python常用知识点汇总
2016/05/08 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
python中的插入排序的简单用法
2021/01/19 Python
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
拓展策划方案
2014/06/03 职场文书
高一军训的心得体会
2014/09/01 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
中秋节慰问信
2015/02/15 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
思品教学工作总结
2015/08/10 职场文书
高一作文之乐趣
2019/11/21 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL