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 相关文章推荐
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
JavaScript OOP类与继承
Nov 15 Javascript
JavaScript自动设置IFrame高度的小例子
Jun 08 Javascript
JS Replace()的高级使用方法介绍
Jun 29 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
Mar 13 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
vue-hook-form使用详解
Apr 07 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
angular inputNumber指令输入框只能输入数字的实现
Dec 03 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
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
Python的标准模块包json详解
2017/03/13 Python
深入理解Python3中的http.client模块
2017/03/29 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
谈谈python垃圾回收机制
2020/09/27 Python
职专应届生求职信
2013/11/16 职场文书
企业金融服务方案
2014/06/03 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
会计实训总结范文
2015/08/03 职场文书
安全教育主题班会总结
2015/08/14 职场文书
员工旷工检讨书
2015/08/15 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书