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 相关文章推荐
给jQuery方法添加回调函数一款插件的应用
Jan 21 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
javascript仿php的print_r函数输出json数据
Sep 13 Javascript
jquery更换文章内容与改变字体大小代码
Sep 30 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
JavaScript数组常用方法
Mar 02 Javascript
JavaScript运算符小结
Jun 03 Javascript
javascript检查某个元素在数组中的索引值
Mar 30 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
使用pm2自动化部署node项目的方法步骤
Jan 28 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
js实现中文实时时钟
2020/01/15 Javascript
python编程开发之类型转换convert实例分析
2015/11/13 Python
bpython 功能强大的Python shell
2016/02/16 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
小班开学寄语
2014/04/04 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
给老婆的道歉信
2015/01/20 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
浅析Python OpenCV三种滤镜效果
2022/04/11 Python