首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性

一、双层循环遍历 1.1、双循环错误示范 前几天看项目,发现有个新旧数组对比,寻找新增元素的需求竟然是用for写的双循环。...1.2、正确的做法 ①使用array.includes() 最基本的就是要会用array.includes()方法,可以少一次循环。...set 使用集合先去重,然后通过Set.has()方法来判断新增元素。...在这个代码中,我们首先创建了一个 Set 对象 set2 来存储 array2 中的所有元素。然后,我们使用 forEach 方法遍历 array1 中的每个元素 item1。...2.3、使用技巧 array.includes()用于判断一个数组是否包含一个指定的值,根据情况返回 true 或 false。

3400
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    每日算法题——两数之和

    许久不见,终于开始在公司上班了,有一点不好的就是一整天都要戴着口罩,闷得慌,不知道大伙儿有没有这种感觉。 又到了每日算法题了,今天继续带来一道简单的题,有兴趣的可以跟着LZ一起刷哈!...解题思路 最简单粗暴的办法就是两个for循环套一起,查一下 i + j 的和是不是为 target,但是这种N^2时间复杂度就有点高了,当我们很容易的找到时间复杂度为N^2的解题办法时,我们就需要考虑一下怎么去优化成...我们来思考一下,上述说的暴力法,在第一遍遍历数组元素之后还需要再挨个遍历数组的元素来找到另一个数,也就是说我们每找一个数都花了N的时间,那么有没有什么办法能让我们再找第一遍的时候就顺便把第二个数字也找出来...,当然是有的了,我们都知道,HashMap 是一个有着映射关系的集合,而且是两两对应的,我们在遍历数组的时候把当前元素和它的下标存到集合中,再判断集合中是不是有目标值与当前元素的差值,如果有的话就说明我们找到了这两个元素...很好理解哈,暴力法是重复遍历了很多次,而我们使用哈希来保存遍历的过程,这样可以减少重复遍历的次数。

    48620

    每天10个前端小知识 【Day 6】

    Js中数组是如何在内存中存储的? 数组不是以一组连续的区域存储在内存中,而是一种哈希映射的形式。它可以通过多种数据结构来实现,其中一种是链表。 4....移动端点击有 300ms 的延迟是因为移动端会有双击缩放的这个操作,因此浏览器在 click 之后要等待 300ms,看用户有没有下一次点击,来判断这次操作是不是双击。...有三种办法来解决这个问题: 通过 meta 标签禁用网页的缩放。 通过 meta 标签将网页的 viewport 设置为 ideal viewport。...(包括原型链上可枚举的属性),for…of 只返回数组的下标对应的属性值; 总结: for…in 循环主要是为了遍历对象而生,不适用于遍历数组;for…of 循环可以用来遍历数组、类数组对象,字符串、Set...所以,上面的第二、三步,箭头函数都是没有办法执行的。 7. 数据类型检测的方式有哪些? (1)typeof:其中数组、对象、null都会被判断为object,其他判断都正确。

    12510

    Python学习手册(第4版).5

    map是对原数组的加工,filter对原数组的过滤。用法相同接受一个函数和列表....Python中的字典是完全不同的东西:它们不是序列,而是一种映射(mapping)。映射是一个其他对象的集合,但是它们是通过键而不是相对位置来存储的。实际上,映射并没有任何可靠的从左至右的顺序。...它们简单地将键映射到值。字典是Python核心对象集合中的唯一的一种映射类型,也具有可变性——可以就地改变,并可以随需求增大或减小,就像列表那样。...一个常用的解决办法就是通过字典的keys方法收集一个键的列表,使用列表的sort方法进行排序,然后使用Python的for循环逐个进行显示结果(正如第3章所介绍的,确保在循环的代码下面两次按下Enter...现在记住,从左到右地扫描一个对象的每个Python工具都使用迭代协议。

    65020

    学习笔记:Hashtable和HashMap

    后来有一位经验丰富的老程序员加入,他就提出了使用hashtable来解决这个问题。...也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。...那么就得有办法去解决这问题,看了看资料有几种方法: 开放定址法:如果发生冲突就继续找下一个空的散列地址 单独链表法:即在发生冲突的位置直接使用链表保存冲突的数据 再散列:即在上次散列计算发生碰撞时,用另一个散列函数计算新的散列函数地址...前面提到的那个Delphi的Hash Table类使用的存储结构是数组+链表的形式,源代码也找不到了,下面就以Java的Hash Table类作为对象来学习吧。...然后后面的代码看看有没有相同的项目,有则替换之。最后创建一个Entry对象保存数据,如果存在碰撞Entry会自动写入链表中解决冲突。

    96780

    2019年Java面试题基础系列228道(6),查漏补缺!

    59、我们能自己写一个容器类,然后使用 for-each 循环码? 60、ArrayList 和 HashMap 的默认大小是多数? 61、有没有可能两个不相等的对象有有相同的 hashcode?...你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然后通过 Collections.sort() 来排序。 53、Java 中怎么打印数组?...你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。...59、我们能自己写一个容器类,然后使用 for-each 循环码? 可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。...d)使用迭代器来循环集合。 e)使用集合的时候使用泛型。 78、说出至少 5 点在 Java 中使用线程的最佳实践。 这个问题与之前的问题类似,你可以使用上面的答案。

    96600

    Java|Map、List与Set的区别

    再来说说集合产生的原因:世间上本来没有集合,只有数组(c语言)。 有人想有可以自动扩展的数组,所以有了List。 有的人想有没有不重复的数组,所以有了set。...而几乎所有的集合都是基于数组来实现的。因为集合是对数组做的封装,所以数组永远比任何一个集合要快。但任何一个集合,比数组提供的功能要多。 1、数组声明了它容纳的元素的类型,而集合不声明。...这是由于集合以Object形式来存储它们的元素。 2、一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 3、数组是一种可读/可写数据结构,没有办法创建一个只读数组。...2.4、Map(映射) Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口。...HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。

    2.8K130

    【C++】string OJ练习

    我们来看几道string相关的OJ,来练习一下string的使用。 1. 仅仅反转字母 题目链接: link 我们一起来看一下题: 思路分析 我们来分析一下题目,这道题让我们干什么呢?...,其实呢我们可以考虑用计数排序的思想去搞: 题目说了只包含小写字母 所以字符串中字符的范围就是【a,z】,那我们就可以创建一个大小为26的整型数组,然后用一个相对映射去统计每个字母的出现次数,...a就映射到下标为0的位置,b就映射到下标为1的位置,依次类推。...其实还有一个地方可以做一些优化,大家想,我们这里replace是把空格替换成%20,这样使用的空间是不是多了,那replace在替换的过程中是不是有可能空间不够进行扩容啊,那有没有什么办法可以避免replace...,那还有没有可以优化的地方? 这里涉及到插入数据,我们就可以考虑干嘛? 是不是可以提前把空间开好以此来避免在插入数据的时候可能引发扩容。 那大家思考一下对于这道题我们应该提前开多少空间合适?

    12310

    HashSet检索方法与集合框架体系

    HashSet检索方法:   首先申请一个返回值为boolean类型的方法参数类型依然为Object,前面同样的使用添加方法里的判断和计算传进来对象的hash值。...如果传进来的值不为null,就声明一个变量名为hashcode的int类型变量,然后使用传进来的对象调用hashCode方法获取到这个对象的hash值,存储到这个变量里: ?  ...得到数组下标后,先判断一下在数组里的这个下标是否为null,也就是看一下这里面有没有存储到数据,如果为null的话自然是什么都没有,所以就返回一个false出去: ?...把数组拿出来后,先写一个死循环来进行查找,直到找到才结束循环,所以先在循环里判断拿出来的值是否为null,是的话就代表没有,返回一个false,不为null则使用这个数组里存储数据的下标来访问equals...方法判断一下里面的对象内容是否为传进来的参数内容,是的话就返回一个true,如果没通过判断就进入else部分继续往下找,直到满足某一个判断条件来结束方法: ?

    48520

    2019年总结:Java中高级面试题228道系列(6)

    59、我们能自己写一个容器类,然后使用 for-each 循环码? 60、ArrayList 和 HashMap 的默认大小是多数? 61、有没有可能两个不相等的对象有有相同的 hashcode?...你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然后通过 Collections.sort() 来排序。 53、Java 中怎么打印数组?...你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。...59、我们能自己写一个容器类,然后使用 for-each 循环码? 可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。...d)使用迭代器来循环集合。 e)使用集合的时候使用泛型。 78、说出至少 5 点在 Java 中使用线程的最佳实践。 这个问题与之前的问题类似,你可以使用上面的答案。

    63720

    一文带你网罗HashMap面试考点!

    为什么不一直使用红黑树? 6、说说你对红黑树的见解? 7、解决hash 碰撞还有那些办法? 8、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?...HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射 HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改 HashMap...HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来储存Node 对象。...如果条件竞争发生了,那么就死循环了。(多线程的环境下不使用HashMap) 为什么多线程会导致死循环,它是怎么发生的? HashMap的容量是有限的。

    1K30

    Java之集合初探(一)

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 数组和集合类同是容器,有何不同?...7:把集合转换为数组 Object[] toArray() Java中集合主要分为三类 Set(集) List(列表) Map(映射) List接口(列表): List的特征是其元素以线性方式存储...最基本的两种检索集合中的所有对象的方法:    1: for循环和get()方法:    2: 使用 迭代器(Iterator):  List主要分: List:最大的特点是有序,它保证维护元素特定的顺序...Map(映射): Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。...使用数字来选择一堆对象中的一个,get(0)...。

    97270

    Node.js 抓取数据过程的进度保持

    听到爬虫二字,我们常常想到的是 Python, Beautiful Soup 之流,而对于简单地抓取数据这种需求来说,一个小米加步枪就能干掉的东西,拉个加农炮来,显得有些大材小用。...驱动整个批量抓取过程的核心在于一个循环,把所有要访问的 URL 放在一个数组,循环遍历一下。...,就可以解决这个问题,但问题来了,万一中途出错退出,再次启动,脚本得重头开始跑,这显然有点不够智能,有没有办法实现在程序中断过后再次启动时让程序恢复上次的进度?...于是我们很容易可以看出,这个简单循环过程所迭代更新的状态变量只有 current,代表当前抓取的 URL 在数组的位置。...有没有什么办法把这些操作集中起来?

    1.4K10

    JS中不同的循环方式和注意事项总结

    /** == for 循环 + 可定制化比较强 可以随时break 和 continue 来决定要不要继续循环 +...判断条件可以随意修改 + 可以在循环的过程中进行每一项值的修改 也可以改变源数组的数据 - 取值比较麻烦,需要使用数组[下标]的方式进行值的操作...,源数组不会被更改 - 一般适用于不知道循环次数的前提下,使用某一个条件进行终止循环 效率和for差不多,只是不知道循环次数的时候可以使用while */...+ 语法简单 + 可以用来遍历对象 - 遍历的时候无法修改和删除集合数据 - 方法不能使用break,continue语句跳出循环...,对于空数组不会执行回调函数 原理是 查看属性中有没有symbol.iterator迭代器 也就是说我们可以通过改变Symbol的规则 进行更改遍历的结果输出 代码如下

    1.1K30

    Java 集合框架体系总览

    简单来说,集合的主要功能就是两点: 存储不确定数量的数据(可以动态改变集合长度) 存储具有映射关系的数据 存储不同类型的数据 不过,需要注意的是,「集合只能存储引用类型(对象),如果你存储的是 int...显然这个双列集合解决了数组无法存储映射关系的痛点。另外,需要注意的是,「Map 不能包含重复的键,值可以重复;并且每个键只能对应一个值」。 ? 来看 Map 接口的继承体系图: ?...Map 由于没有实现 Iterable 接口,所以不能直接使用迭代器或者 for each 循环进行遍历,但是转成 Set 之后就可以使用了。至于迭代器是啥请继续往下看。...可以看到 Collection 这个接口就继承了 Itreable 接口,所以所有实现了 Collection 接口的集合都可以使用 for each 循环。 ?...假设迭代器是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现 Collection 的遍历。

    1.5K21

    HashMap?面试?我是谁?我在哪

    为什么不一直使用红黑树? 6、说说你对红黑树的见解? 7、解决hash 碰撞还有那些办法? 8、如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?...HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射 HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改 HashMap...HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来储存Node 对象。...如果条件竞争发生了,那么就死循环了。(多线程的环境下不使用HashMap) 为什么多线程会导致死循环,它是怎么发生的? HashMap的容量是有限的。

    58330

    BAT 要的是什么样的前端实习生?

    你能结合上面的缓存协议,来组合做一份优化吗? CSS 布局 什么叫做盒模型? 实现垂直居中办法有哪些呢? 网格布局中,设置元素位置方式有哪几种? 如何设置行列间的间隔?...通过取余 这个 hash 长度有没有讲究? 最好为质数 怎么解决 Hash 碰撞呢? 开链法,线性探索,简单来说就是对于相同 hash 增加一个二维数组来记录重复。 如何检测括号有没有完整匹配?...通过堆栈来解决 一个单词是否是回文? 通过 split 拆分字符串,通过数组倒序来实现 ( split('').reverse().join(''))。 对一个数组进行去重,算法为 O(n)?...利用对象 key 唯一的特性,判断每个数组 val(Obj[val] )是否一致即可。 如何统计字符串中出现次数最多的字符? 同样利用对象 key 的唯一特性来解决。...webpack 编译工具 使用 Webpack 来导出一个 demo.js 的库,规定可以通过全局变量、require\import 等方式使用,应该设置哪些属性?

    88940

    【offer 收割计划】你知道为什么 reducer 最好是一个纯函数吗?

    value 值,你也可以通过下面这种方式来遍历出对象的 key, value 值,但是这样会相对的麻烦一些,因此不推荐 for ... of 来遍历对象 ✅ for...of 更适合遍历数组,并且它只是遍历数组内的元素...类型,因此在使用 index 来进行计算的时候需要注意 总结以上,for ... in 和 for ... of 的区别有以下几点 for ... in 循环出的是 index,for ... of...在之前的 indexOf 方法中存在着一些问题,主要是在于 NaN 的判断上,indexOf 没有办法去判断数组中是否存在 NaN 值,当我们需要判断数组中是否存在 NaN 值的时候,我们需要采用 includes...== 来进行判断前后的 state 是否相等,这是一种浅比较的方法,我的理解就是地址有没有变化 因此如果我们传入的 state 是在旧的基础上更改的,那么它的地址是不会发生变化的,因此是不会通过这层浅比较的...JavaScript 中的循环语句,也区分了 splice 和 slice 而又深入理解 redux 中 reducer 的工作原理,这对我自己来说提升还是很大的,不知道看到这里的你有没有什么收获呢?

    1K20
    领券