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 相关文章推荐
转换字符串为json对象的方法详解
Nov 29 Javascript
使用原生js写的一个简单slider
Apr 29 Javascript
js 获取时间间隔实现代码
May 12 Javascript
js去字符串前后空格的实现方法
Feb 26 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
Jul 24 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
vue里面使用mui的弹出日期选择插件实例
Sep 16 Javascript
在vue里使用codemirror遇到的问题
Nov 01 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
python中__call__方法示例分析
2014/10/11 Python
Python计算字符宽度的方法
2016/06/14 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
简单了解django文件下载方式
2020/02/10 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
python 两种方法删除空文件夹
2020/09/29 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
收入证明申请书
2015/06/12 职场文书
解除合同协议书范本
2016/03/21 职场文书
Go gorilla/sessions库安装使用
2022/08/14 Golang