当前位置: 首页 > Web前端 > JavaScript

forEach中的“return”

时间:2023-03-27 15:14:34 JavaScript

今天在做leetcode题的时候遇到了一个问题。纠结了一段时间,找到了原因,写了这篇文章。题目如下,链接217有重复元素leetcode217有重复元素给定一个整数数组,判断是否有重复元素。如果某个值在数组中至少出现两次,则该函数返回true。如果数组中的每个元素都不同,则返回false。然后我写了我的解决方案varcontainsDuplicate=function(nums){constmap=newMap()nums.forEach(item=>{if(!map.has(item)){map.set(item,'')}else{返回真}})返回假};测试用例[1,2,3,1]没有通过,有一个重复的元素1,需要返回true,但是我写的那几行实际返回false的代码看了一遍又一遍,还是可以的找问题。我几乎怀疑自己。然后我把forEach方法改成了for循环,输出就对了!然后一直找资料,才发现forEach确实有问题。其实在forEach回调函数中使用return并不会跳出整个函数,只会跳出当前循环。想跳出当前循环怎么办?这时候就需要trycatch来接收和抛出异常来解决这个问题)){map.set(item,'')}else{thrownewerror}})returnfalse};}catch{returntrue}但是如果这样写,是不能完成算法要求的。想了想,可以改成用一个for循环来求解,代码如下varcontainsDuplicate=function(nums){constmap=newMap()for(leti=0;i{if(!map.has(item)){map.set(item,'')}else{result=true}})返回结果};其实还有另一种机会主义的方法可以解决这个算法问题,代码如下functioneasy(nums){constset=newSet(nums)returnset.size===nums.length}(完成!)