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 相关文章推荐
如何简单地用YUI做JavaScript动画
Mar 10 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
Dec 28 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
Oct 17 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
js模式化窗口问题![window.dialogArguments]
Oct 30 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
基于Vue的商品主图放大镜方案详解
Sep 19 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
Vue开发环境跨域访问问题
2020/01/22 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
深入学习python的yield和generator
2016/03/10 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python3离线安装Requests模块问题
2019/10/13 Python
python判断链表是否有环的实例代码
2020/01/31 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
会议开幕词
2015/01/28 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
教师节随笔
2015/08/15 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
Python3 类型标注支持操作
2021/06/02 Python
聊聊Python String型列表求最值的问题
2022/01/18 Python