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 相关文章推荐
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
基于jquery的修改当前TAB显示标题的代码
Dec 11 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
vue 实现在函数中触发路由跳转的示例
Sep 01 Javascript
layui-laydate时间日历控件使用方法详解
Nov 15 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 Javascript
vue.js+element 默认提示中英文操作
Nov 11 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文件
2007/01/04 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
JS 页面计时器示例代码
2013/10/28 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
初探nodeJS
2017/01/24 NodeJs
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
表决心的诗句大全
2014/03/11 职场文书
捐款活动总结
2014/08/27 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
领导工作表现评语
2015/01/04 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers