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 相关文章推荐
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
Jan 19 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
基于jQuery实现的文字按钮表单特效整理
Dec 07 Javascript
使用js画图之饼图
Jan 12 Javascript
jQuery实现带滚动线条导航效果的方法
Jan 30 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
理解jquery事件冒泡
Jan 03 Javascript
jQuery列表检索功能实现代码
Jul 17 jQuery
不使用JavaScript实现菜单的打开和关闭效果demo
May 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部分常见问题总结
2006/10/09 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
Python 互换字典的键值对实例
2019/02/12 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
党员一帮一活动总结
2014/07/08 职场文书
运动员获奖感言
2014/08/15 职场文书
村创先争优活动总结
2014/08/28 职场文书
2015年财务人员工作总结
2015/04/10 职场文书
给朋友的赠语
2015/06/23 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
Vue2.0搭建脚手架
2022/03/13 Vue.js
nginx配置指令之server_name的具体使用
2022/08/14 Servers