JavaScript使用类似break机制中断forEach循环的方法


Posted in Javascript onNovember 13, 2018

JavaScript数组对象,有一个forEach方法,可枚举每一个数组元素,但并不支持类似for循环的break语法,中断循环:

[1,2,3].forEach(function(item) {
  // if(!item) break; 不支持
});

解决办法,可抛出一个特殊异常,来中断forEach循环,原理:

var BreakException = {};
try {
[1, 2, 3].forEach(function(el) {
console.log(el);
if (el === 2) throw BreakException;
});
} catch (e) {
if (e !== BreakException) throw e;
}

也可复写forEach方法:

// Use a closure to prevent the global namespace from be polluted.
(function() {
// Define StopIteration as part of the global scope if it
// isn't already defined.
if(typeof StopIteration == "undefined") {
StopIteration = new Error("StopIteration");
}
// The original version of Array.prototype.forEach.
var oldForEach = Array.prototype.forEach;
// If forEach actually exists, define forEach so you can
// break out of it by throwing StopIteration. Allow
// other errors will be thrown as normal.
if(oldForEach) {
Array.prototype.forEach = function() {
try {
oldForEach.apply(this, [].slice.call(arguments, 0));
}
catch(e) {
if(e !== StopIteration) {
throw e;
}
}
};
}
})();

使用

// Show the contents until you get to "2".
[0,1,2,3,4].forEach(function(val) {
if(val == 2)
throw StopIteration;
alert(val);
});

总结

以上所述是小编给大家介绍的JavaScript使用类似break机制中断forEach循环的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
如何取得中文输入的真实长度?
Jun 24 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
Sep 05 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
js实现页面跳转的几种方法小结
May 16 Javascript
js实现前端分页页码管理
Jan 06 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 Javascript
详解Vue中watch的高级用法
May 02 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
jQuery实现动态加载瀑布流
Sep 01 jQuery
vue判断按钮是否可以点击
Apr 09 Vue.js
小程序登录态管理的方法示例
Nov 13 #Javascript
Vuex 使用 v-model 配合 state的方法
Nov 13 #Javascript
vue代码分割的实现(codesplit)
Nov 13 #Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 #Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 #Javascript
checkbox在vue中的用法小结
Nov 13 #Javascript
React父子组件间的传值的方法
Nov 13 #Javascript
You might like
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php加密解密字符串示例
2016/10/13 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
Jquery 实现弹出层插件
2015/01/28 Javascript
js电话号码验证方法
2015/09/28 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Django发送邮件功能实例详解
2019/09/02 Python
Python requests上传文件实现步骤
2020/09/15 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
机械设计制造专业个人求职信
2013/09/25 职场文书
社区庆八一活动方案
2014/02/02 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
股份转让协议书
2014/04/12 职场文书
专科生就业求职信
2014/06/22 职场文书
骨干教师申报材料
2014/12/17 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js