js for终止循环 跳出多层循环


Posted in Javascript onOctober 04, 2018

今天三水点靠木小编写带代码的时候遇到一段代码,需要终止运行for,通过遍历json数据实现判断

<script>
var Tid="55555";
var 3watercp = [
{id:66666,Cpurl:"https://baidu.com"},
{id:55555,Cpurl:"https://3water.com"}
];
 
 
for(var i = 0; i < 3watercp.length; i++){
	if(3watercp[i].id==Tid){
	var	thevalue=3watercp[i].Cpurl;
	break;
		}
}
alert(thevalue);
</script>

通过上面的代码,完美解决了我的需求,但感觉性能不高,建议用switch函数,json方便批量输出,通过for判断会降低性能。注意查看break的地方。

示例代码

var a = [1,2,3,4,5,6,7,8]; // 8个数
var b = [11,12,13,14,15,3,16,17]; //8个数

testFor();
console.log('555')

function testFor() {
 for(var k=0;k<a.length;k++){
 console.log('444');
 for(var i=0;i<a.length;i++){
  for(var j=0;j<b.length;j++){
  if( a[i]==b[j] ){
   return false;
  }
  console.log('111');
  }
  console.log('2222');
 }
 console.log('333');
 }
}


输出:
// 1次444
// 8次111
// 1次222
// 8次111
// 1次222
// 5次111
// 1次555

可见 return 会直接跳出多层循环,返回调用的方法外部
原因: js里for是没有局部作用域的概念,方法才能一个局部作用域
return将会跳出当前局部作用继续执行下面的方法

注意:

1.这里for循环如果直接放在全局作用域下执行而不被一个方法包裹,
将直接导致写在for后的代码永远不会被执行;

2.如遇到逻辑特别复杂多层循环的时候,会遇到一些迭代器之类的方法,
这种迭代器实现的不同,会出现另一种情况,即不会跳出任何循环,
循环仍然继续,只是当前循环if后的代码不会被执行一次,下一次循环开始时,
仍然会执行if后的代码

如:

var cc = 'xx';

Object.keys(o).forEach(function(key) {
var val = o[key];
if(cc == key){
return false;
}
console.log(key);
});

此外还有

break;
continue;

语句
break 语句跳出循环后,会继续执行该循环之后的代码 (退出循环)
continue continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。(跳过当前迭代,进入下次迭代)
这两个语句可以指定label从而可以退出特定的循环

bbq:
for(var j=0;j<a.length;j++){
 ccc:
 for(var i =0;i<a.length;i++){
  if( i==5 ){
   break bbq; //直接跳出bbq外层循环
  }
 }
}


或者:
function testFor() {
 bbq:
 for(var k=0;k<a.length;k++){
  console.log('444');
  ccc:
  for(var i=0;i<a.length;i++){
   ddd:
   for(var j=0;j<b.length;j++){
    if(j == 2){
     break;
    }
    console.log('j '+j);
   }
   console.log('i '+i);
  }
  console.log('k '+k);
 }
}

// 只会每次循环j==2时退出ddd循环然后外面的循环都会继续循环

Javascript 相关文章推荐
JavaScript中数据结构与算法(一):栈
Jun 19 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
Dec 29 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
vue-router history模式下的微信分享小结
Jul 05 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
vue中的面包屑导航组件实例代码
Jul 01 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 #Javascript
Angular resolve基础用法详解
Oct 03 #Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 #Javascript
angular.js实现列表orderby排序的方法
Oct 02 #Javascript
Angularjs实现数组随机排序的方法
Oct 02 #Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 #Javascript
angularjs获取到My97DatePicker选中的值方法
Oct 02 #Javascript
You might like
推荐文章系统(一)
2006/10/09 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
python format 格式化输出方法
2018/07/16 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
Python中正则表达式的用法总结
2019/02/22 Python
Python Celery多队列配置代码实例
2019/11/22 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
高中生毕业评语
2014/12/30 职场文书
国家助学金感谢信
2015/01/21 职场文书
科技活动总结范文
2015/05/11 职场文书
十二生肖观后感
2015/06/12 职场文书
红色革命电影观后感
2015/06/18 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
Python+DeOldify实现老照片上色功能
2022/06/21 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL