博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS判断数组重复
阅读量:6266 次
发布时间:2019-06-22

本文共 895 字,大约阅读时间需要 2 分钟。

背景

项目需要前端判断已建列表是否存在重复的数据,经过校验后再进行下一步。以下为逐步改良的过程,虽然整个过程并不复杂而且没什么技术含量,还是记录一下以便他人。

最单纯的方法

最单纯的方法当然是直接两层for循环判断,但是如果当数据量大的时候,计算量也将指数上涨,所以非常不好,果断抛弃。

排序后查重

这种思路主要是拿到数据之后先封装到数组中,然后对数组进行一次排序,然后从头到尾遍历看自己的后一个是否相同即可,如果相同,直接返回。这种方法多出了一次对实际业务没有用处的排序操作,也有些缺陷。

利用Set的特性

Set的特性是不重复,所以思考可以利用这一点进行比对。整体思路是将数组中的数据放入Set中,然后比较Set和原数组的长度,如果不一致,那么说明存在重复的数据。

代码如下:

var sourceArray = [1,2,3,4,5];var tempSet = new Set();for(i = 0;i

就在我美滋滋的已经把算法实现到我们项目的时候,前端的妹子告诉我Set的兼容性存在问题,所以不得不抛弃了这个想法,进入了下一步的优化。

位图的思想

这个标题是我根据位图排序的思想起的名字,(位图排序是一种很好玩的排序思路,有兴趣可以百度)。这种优化的主要思路是设置了一个标志位的数组,如果存在则对应位置为true。如果某一个数据发现自己的位置已经是true了,那么说明存在重复的数据了。

代码如下:

var sourceArray = [1,2,3,4,5,4,5];var flagArray = new Array();for(i = 0;i

思路的发展

开始动手的时候已经知道两层循环是不行的,所以一定不会采取这种方式,然后想到的是是否已经存在重复的轮子,也就是说,有没有函数能直接判断重复,查了一下好像没有,于是想到了Set这个数据结构的特性,往这个上面靠,所以诞生了第三种方案,但是后来又发现兼容性问题,所以最终采用了第四种方案。

整体的思路就是这样,或许知道了某一种优化可以牢记于心,以后直接用,但是如果掌握了优化的思路,就可以面对各种场景思考方案,更活而不是死记。

转载地址:http://pyvpa.baihongyu.com/

你可能感兴趣的文章
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>
Netty中的三种Reactor(反应堆)
查看>>
网页内容的html标签补全和过滤的两种方法
查看>>
前端源码安全
查看>>
【CodeForces 618B】Guess the Permutation
查看>>
【转】如何实现一个配置中心
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
查看>>
Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)
查看>>
Atitit.Java exe bat 作为windows系统服务程序运行
查看>>
session的生命周期
查看>>
数据库的本质、概念及其应用实践(二)
查看>>
iOS开发多线程--(NSOperation/Queue)
查看>>
php的ajax简单实例
查看>>
maven常用构建命令
查看>>
C#:关联程序和文件
查看>>
推荐科研软件
查看>>
gradle
查看>>
如何取消未知类型文件默认用记事本打开
查看>>
[Javascript] Immute Object
查看>>