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 相关文章推荐
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
Jun 06 Javascript
jQuery给动态添加的元素绑定事件的方法
Mar 09 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
js实现简单数字变动效果
Nov 06 Javascript
React diff算法的实现示例
Apr 20 Javascript
JavaScript实现异步图像上传功能
Jul 12 Javascript
JS原型和原型链原理与用法实例详解
Feb 05 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP 危险函数全解析
2009/09/09 PHP
php变量范围介绍
2012/10/15 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
windows及linux环境下永久修改pip镜像源的方法
2016/11/28 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
详解python中的json和字典dict
2018/06/22 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
详解Python 切片语法
2019/06/10 Python
基于django传递数据到后端的例子
2019/08/16 Python
Python restful框架接口开发实现
2020/04/13 Python
python中封包建立过程实例
2021/02/18 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
工作岗位说明书模板
2014/05/09 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
颐和园的导游词
2015/01/30 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript