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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
jQuery的load()方法及其回调函数用法实例
Mar 25 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
EasyUI学习之DataGird分页显示数据
Dec 29 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
深入理解Promise.all
Aug 08 Javascript
Node+OCR实现图像文字识别功能
Nov 26 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 Javascript
详解nginx配置vue h5 history去除#号
Nov 09 Javascript
JavaScript实现音乐导航效果
Nov 19 Javascript
小程序登录态管理的方法示例
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
php MySQL与分页效率
2008/06/04 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python实现翻转数组功能示例
2018/01/12 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python 中如何写注释
2020/08/28 Python
Python通过format函数格式化显示值
2020/10/17 Python
重构Python代码的六个实例
2020/11/25 Python
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
简单而又朴实的个人求职信分享
2013/12/12 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
Redis Stream类型的使用详解
2021/11/11 Redis
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers