资讯专栏INFORMATION COLUMN

JS判断数组重复

王军 / 221人阅读

摘要:背景项目需要前端判断已建列表是否存在重复的数据,经过校验后再进行下一步。整体思路是将数组中的数据放入中,然后比较和原数组的长度,如果不一致,那么说明存在重复的数据。

背景

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

最单纯的方法

最单纯的方法当然是直接两层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这个数据结构的特性,往这个上面靠,所以诞生了第三种方案,但是后来又发现兼容性问题,所以最终采用了第四种方案。
整体的思路就是这样,或许知道了某一种优化可以牢记于心,以后直接用,但是如果掌握了优化的思路,就可以面对各种场景思考方案,更活而不是死记。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84728.html

相关文章

  • JS数组专题2️⃣ ➖ 数组去重

    距离上次发文,已经有一段时间了,最近工作比较忙,这不眼看快双十一了,就相当于给大家一些福利吧! showImg(https://segmentfault.com/img/remote/1460000016538082?w=250&h=250); 一、什么是数组去重 简单说就是把数组中重复的项删除掉,你 GET 到了吗 ?下面我将简单介绍下几种基本的方法及其优缺点。 二、方法汇总 两层循环 无相同...

    tunny 评论0 收藏0
  • JS数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复数组

    摘要:题目已知如下数组编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组实现数组扁平化去重排序解析数组扁平化判断数组子元素是否为数组是的话进行递归否则把子元素变为数组的执行结果为的执行结果为数组去重通过实现 题目: 已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, ...

    godruoyi 评论0 收藏0
  • 唠叨一下js对象与哈希表那些事

    摘要:的扩展知识对于哈希表来说,最重要的莫过于生成哈希串的哈希算法和处理冲突的策略了。由于链表的查找需要遍历,如果我们将链表换成树或者哈希表结构,那么就能大幅提高冲突元素的查找效率。 最近在整理数据结构和算法相关的知识,小茄专门在github上开了个repo https://github.com/qieguo2016...,后续内容也会更新到这里,欢迎围观加星星! js对象 js中的对象是基...

    Nosee 评论0 收藏0
  • es6 Set和WeakSet

    摘要:返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。上面代码中,方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。因此,适合临时存放一组对象,以及存放跟对象绑定的信息。 Js大部分历史时期都只存在一种集合类型,也就是数组类型。数组在 JS 中的使用正如其他语言的数组一样,但缺少更多类型的集合导致数组也经常被当作队列与栈来使用。数组只使用了数值...

    marser 评论0 收藏0

发表评论

0条评论

王军

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<