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 相关文章推荐
newxtree.js代码
Mar 13 Javascript
JavaScript开发时的五个注意事项
Dec 08 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
Jan 24 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
JavaScript伸缩的菜单简单示例
Dec 03 Javascript
javascript对象的使用和属性操作示例详解
Mar 02 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
前端js中的事件循环eventloop机制详解
May 15 Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
js原生map实现的方法总结
Jan 19 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
学习php设计模式 php实现建造者模式
2015/12/07 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
学习并汇集javascript匿名函数
2010/11/25 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Django中使用Celery的方法示例
2018/11/29 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
大学系主任推荐信范文
2013/12/24 职场文书
大学毕业寄语大全
2014/04/10 职场文书
电子商务实训报告总结
2014/11/05 职场文书
绵山导游词
2015/02/05 职场文书
新郎结婚感言
2015/07/31 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
java开发双人五子棋游戏
2022/05/06 Java/Android