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 autocomplete 使用手册
Apr 01 Javascript
jQuery中:lt选择器用法实例
Dec 29 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 Javascript
JS中判断null的方法分析
Nov 21 Javascript
详解Vue自定义过滤器的实现
Jan 10 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
jQuery中$原理实例分析
Aug 13 jQuery
微信小程序常用简易小函数总结
Feb 01 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
vue 中几种传值方法(3种)
Nov 12 Javascript
JS原生实现轮播图的几种方法
Mar 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的图形函数中显示汉字
2006/10/09 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python2 与 python3 实现共存的方法
2018/07/12 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
python 创建一维的0向量实例
2019/12/02 Python
python如何建立全零数组
2020/07/19 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
英语专业个人求职自荐信
2013/09/21 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
植树节标语
2014/06/27 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
公司租车协议书
2015/01/29 职场文书
护士旷工检讨书
2015/08/15 职场文书
导游词之桂林山水
2019/09/20 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
golang的文件创建及读写操作
2022/04/14 Golang