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 easyui的tabs使用时的问题
Mar 23 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
js实现透明度渐变效果的方法
Apr 10 Javascript
jquery checkbox的相关操作总结
Oct 17 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
javascript Number 与 Math对象的介绍
Nov 17 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+jQuery实现自动补全功能源码
2013/05/15 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python处理“
2019/06/10 Python
python读取mysql数据绘制条形图
2020/03/25 Python
python xlsxwriter模块的使用
2020/12/24 Python
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
预备党员公开承诺书
2014/05/28 职场文书
大型公益活动策划方案
2014/08/20 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
python使用glob检索文件的操作
2021/05/20 Python
Python合并多张图片成PDF
2021/06/09 Python
Redis三种集群模式详解
2021/10/05 Redis