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 清除输入框中的数据
Apr 13 Javascript
jquery remove方法应用详解
Nov 22 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 Javascript
javascript每日必学之运算符
Feb 16 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
详解JS几种变量交换方式以及性能分析对比
Nov 25 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
JavaScript中EventBus实现对象之间通信
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提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
10条php编程小技巧
2015/07/07 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python安装本地whl的实例步骤
2019/10/12 Python
Python有参函数使用代码实例
2020/01/06 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
学生周末回家住宿长期请假条
2014/02/15 职场文书
四年大学自我鉴定
2014/02/17 职场文书
内科护士节演讲稿
2014/09/11 职场文书
党校毕业心得体会
2014/09/13 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript