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 相关文章推荐
jQuery中:radio选择器用法实例
Jan 03 Javascript
node.js 动态执行脚本
Jun 02 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
Nov 09 Javascript
AngularJS使用拦截器实现的loading功能完整实例
May 17 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
vue.js实现备忘录demo
Jun 26 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
Oct 25 Javascript
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
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 session安全问题分析
2011/06/24 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
js Calender控件使用详解
2015/01/05 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
Python OS模块常用函数说明
2015/05/23 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python yield与实现方法代码分析
2018/02/06 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
python列表推导式入门学习解析
2019/12/02 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
python实现图片素描效果
2020/09/26 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
车辆工程专业求职信
2014/04/28 职场文书
医院保洁服务方案
2014/06/11 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
放牛班的春天观后感
2015/06/01 职场文书
高一地理教学工作总结
2015/08/12 职场文书
外科护士长工作总结
2015/08/12 职场文书