JS实现的数组去除重复数据算法小结


Posted in Javascript onNovember 17, 2017

本文实例讲述了JS实现的数组去除重复数据算法。分享给大家供大家参考,具体如下:

在JS中经常会遇到去除数组中重复数据的需求,在此介绍四种算法以实现JS数组去重的功能.

1. 速度最快算法:对象键值对法

实现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,不是的话给对象新增该键并放入新数组。

//注意点: 判断 是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如: a[1]、a["1"] 。解决上述问题还是得调用“indexOf”。
//速度最快, 占空间最多(空间换时间)
function unique(array){
  var n = {}, r = [], len = array.length, val, type;
  for (var i = 0; i < array.length; i++) {
    val = array[i];
    type = typeof val;
    if (!n[val]) {
      n[val] = [type];
      r.push(val);
    } else if (n[val].indexOf(type) < 0) {
      n[val].push(type);
      r.push(val);
    }
  }
  return r;
}
//测试代码:
var arr=[1,2,3,4,5,29,5,3,1,2];
var rel=unique(arr);
console.log(rel);

运行结果:

JS实现的数组去除重复数据算法小结

2.最巧妙算法:优化遍历数组法

实现思路:获取没重复的最右一值放入新数组。(检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)

function unique1(array){
  var r = [];
  for(var i = 0, l = array.length; i<l; i++){
    for(var j = i + 1; j < l; j++)
      if(array[i] == array[j]) j == ++i;
    r.push(array[i]);
  }
  return r;
}
//测试代码:
var arr=[1,2,3,4,5,29,5,2];
var rel=unique1(arr);
console.log(rel);

运行结果:

JS实现的数组去除重复数据算法小结

3.算法:排序后相邻去除法

实现思路:给传入数组排序,排序后相同值相邻,然后遍历时新数组只加入不与前一值重复的值。

//将相同的值相邻,然后遍历去除重复值
function unique2(array){
  array.sort();
  var re=[array[0]];
  for(var i = 1; i < array.length; i++){
    if( array[i] !== re[re.length-1])
    {
      re.push(array[i]);
    }
  }
  return re;
}
//测试代码:
var arr=[1,2,3,4,5,29,5,2,3,1];
var rel=unique2(arr);
console.log(rel);

运行结果:

JS实现的数组去除重复数据算法小结

4.算法:数组下标判断法

实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入结果数组

function unique3(array){
  var n = [array[0]]; //结果数组
  //从第二项开始遍历
  for(var i = 1; i < array.length; i++) {
    //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
    //那么表示第i项是重复的,忽略掉。否则存入结果数组
    if (array.indexOf(array[i]) == i) n.push(array[i]);
  }
  return n;
}
//测试代码:
var arr=[1,2,3,4,5,29,3,4,2,5,1];
var rel=unique3(arr);
console.log(rel);

运行结果:

JS实现的数组去除重复数据算法小结

Javascript 相关文章推荐
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
在html页面中包含共享页面的方法
Oct 24 Javascript
基于jquery的Repeater实现代码
Jul 17 Javascript
jquery实现加载等待效果示例
Sep 25 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
js拖拽一些常见的思路方法整理
Mar 19 Javascript
jquery 判断滚动条到达了底部和顶端的方法
Apr 02 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
深入理解javascript中concat方法
Dec 12 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
Feb 08 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 Javascript
bootstrap轮播模板使用方法详解
Nov 17 #Javascript
浅谈Node模块系统及其模式
Nov 17 #Javascript
基于Bootstrap表单验证功能
Nov 17 #Javascript
js 毫秒转天时分秒的实例
Nov 17 #Javascript
Bootstrap table使用方法汇总
Nov 17 #Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 #Javascript
使用3D引擎threeJS实现星空粒子移动效果
Sep 13 #Javascript
You might like
PHP 中的一些经验积累
2006/10/09 PHP
最小化数据传输――在客户端存储数据
2006/10/09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
python相似模块用例
2016/03/04 Python
python高阶爬虫实战分析
2018/07/29 Python
python实现多人聊天室
2020/03/31 Python
Python @property使用方法解析
2019/09/17 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
假日旅行社实习自我鉴定
2013/09/24 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
股东出资协议书
2016/03/21 职场文书