数组遍历的问题

我可是兔子
  • 369

除了for循环遍历数组。
像map、forEach之类的遍历数组的方法能不能当满足条件后跳出循环,我发现break和return在map和forEach里是无效的。

回复
阅读 3.6k
10 个回答
Eric
  • 133
✓ 已被采纳

forEach、map、filter、reduce、every、some 都会有 break 和 continue 不生效的问题,因为是在function中,但function解决了闭包陷阱的问题;要使用 break、continue 可以使用 for、for...in、for...of、while。

Array.prototype.some() 和 Array.prototype.every() 都可以满足

你是在回调函数中return,所以才不会起作用。

map和forEach中的参数实际上是一个函数,这个函数会被一个内置的高阶函数反复在数组元素上调用,break和return只是让这个被调动函数返回,并不能结束背后的那个隐藏的高阶函数

Timmy
  • 345

最简单的

for(var i=0;i<arr.length;i++){
    ...
}
肯定可以使用break

如果只是对数组而言的话,且数组原型上没有添加自定义属性、方法,那也可以用for-in啊
楼上有人提到了es6的for-of,是比较优雅的方法。

for(var i in arr){
   if(arr.hasOwnProperty(i)){
      ...
   }
}

while函数可以

https://developer.mozilla.org...

你可以自己修改Array.prototype.map()的行为,但是map/reduce/forEach/filter 本身就不是和for一样用的,他们的目的就是遍历整个数组。

中间break可以for或者while。

强制加上跳出条件也可以,但是不是很建议。

你自己写个循环不就行了,map、forEach会返回一个新的数组,或者用filter过滤

你可以用find方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏