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 相关文章推荐
JS中简单的实现像C#中using功能(有源码下载)
Jan 09 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
Apr 15 Javascript
js动态添加删除,后台取数据(示例代码)
Nov 25 Javascript
JavaScript中使用指数方法Math.exp()的简介
Jun 15 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
jQuery插件autocomplete使用详解
Feb 04 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
详解Node.js读写中文内容文件操作
Oct 10 Javascript
JS开发常用工具函数(小结)
Jul 04 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 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/12/06 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
教师党性分析材料
2014/02/04 职场文书
企业文化演讲稿
2014/05/20 职场文书
节能标语大全
2014/06/21 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
大二学年个人总结
2015/03/03 职场文书
外贸英文求职信范文
2015/03/19 职场文书
防汛通知
2015/04/25 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
详解Python描述符的工作原理
2021/06/11 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript