文档章节

JavaScript break跳出多重循环

文文1
 文文1
发布于 2016/11/27 22:37
字数 625
阅读 78
收藏 0

多重循环在编程中会经常遇到,那么在JavaScript中如何指定跳出那层的循环呢。其实这也是break的一个用法,下面是一个不错的例子,来自《JavaScript权威指南》,可以参考下:

<script type="text/javascript">
outerloop://命名外圈语句
for(i=0; i<10; i++)
{
	innerloop://命名内圈语句
	for(j=0; j<10; j++)
	{
		// 跳出内圈循环
		if(j>3){break;}
		// 跳出内圈循环
     	if(i==2){break innerloop;}
		// 跳出外圈循环
 		if(i==4){break outerloop;}
		document.write("i = "+i+" , j = "+j+"<br />");
	}
}
document.write("final"+" i = "+i+" , j = "+j);
</script>

程序运行结果:

i = 0 , j = 0
i = 0 , j = 1
i = 0 , j = 2
i = 0 , j = 3
i = 1 , j = 0
i = 1 , j = 1
i = 1 , j = 2
i = 1 , j = 3
i = 3 , j = 0
i = 3 , j = 1
i = 3 , j = 2
i = 3 , j = 3
final i = 4 , j = 0

另外一个例子:强行跳出递归

错误的写法:

function getFirstParentNode(node){
    if(node.getParentNode() != null){
        getFirstParentNode(node.getParentNode());
    }else{
        return node;
    }
}

根据某节点获取他最顶层节点,如果这么写,发现return后还是会执行递归

正确的写法:

function getFirstParentNode(node){
    if(node.getParentNode() != null){
        return getFirstParentNode(node.getParentNode());
    }else{
        return node;
    }
}

项目中的一个例子:

循环easyui的treegrid的每个子节点,找到和传入参数listCode相等的子节点

var returnCcTypeMask = false;
//var rows = $('#id').treegrid('getData');//这个是获取所有一级节点
function getCcTypeMaskFlag(rows,listCode){
	if(rows && rows.length >0){
		for(var i = 0;i<rows.length;i++){
			var row = rows[i];
			if(row.children.length>0){
				//这里return 必须加上,否则不管是否找到code == listCode,都会把所有节点全部循环完
				if(!returnCcTypeMask){
					getCcTypeMaskFlag(row.children,listCode);
				};
			}else{
				if(!returnCcTypeMask){
					var code = rows[i].listCode;
					if(code == listCode){
						var ccTypeMask = rows[i].ccTypeMask;
						if(ccTypeMask == 1 || ccTypeMask ==2 || ccTypeMask ==3 || ccTypeMask ==4){
							returnCcTypeMask = true;//显示提示信息框
						}
						return returnCcTypeMask;
					}
				}else{
					return returnCcTypeMask;
				}
			}
		}
	}
	return returnCcTypeMask;
}

在循环每个节点的时候,如果该节点有子节点,那么循环该节点的所有子节点,这里必须要定义一个全部变量,用来判断递归是否继续进行:var returnCcTypeMask = false;

如果不这么写,只是在找到的这个节点和参数listCode相等,就return,也是不行的,这个return 只是跳出当前这个循环,但是当前循环的上层循环还是会继续进行,所以这里用全部变量来控制,所以在if(code == listCode)的时候,利用return 跳出当前循环,于是进入上级循环,在上层循环中根据全局变量returnCcTypeMasky的值来判断是否要跳出上层循环,如果returnCcTypeMasky为true,会跳出所有循环

© 著作权归作者所有

共有 人打赏支持
文文1
粉丝 22
博文 380
码字总数 119919
作品 0
长沙
程序员
私信 提问
JavaScript 基础 --- (数据类型/循环/条件)

一、js 输出 1.window.alert() 警告框 2.document.write() 写到 HTML 文档中 3.innerHTML 写到 HTML 元素 4.console.log() 写到浏览器的控制台 二、js 语句与注释 1. ; (var a = 1;) ;表...

姜白告
2018/06/19
0
0
JavaScript forEach 跳出当前循环

Js 中 forEach 不能使用 continue, break 跳出循环 可以使用 if 语句控制,或者 return . (return true/false) // return --> 类似 for 循环的 continue //全选 $scope.selectAll = functio......

Jack088
2015/08/20
0
2
JS学习系列 07 - 标签声明(Label Statement)

1. 引言 假设有这么一道题: 我想要当 j = 2 的时候就退出所有的for语句,打印最后的 done ,你会怎么做? 可能有的同学会想到这样: 这样可以实现,但是又多写了一个函数,那么有没有别的办...

liuxuan
2018/05/30
0
0
JavaScript 学习(1)

参考资料:http://www.w3school.com.cn/js/index.asp 额,发现 http://www.w3cschool.cc 这里的资料似乎比上面那个更新鲜一些... 一、教程 js是一种轻量级的编程语言,可插入html页面中,并由...

明天以后
2014/09/30
0
0
JavaScript基础——变量-运算符-流程控制语句

JavaScript是在客户端浏览器解释执行的语言,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: 1.ECMAScript:描述了该语言的语法和基本对象; 2.文档对象模型(Document Object M...

codejson
2018/07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

苏宁金融红包系统大促海量流量背后的技术支撑

发红包是目前各大互联网公司最常用的营销手段之一,它形式多样,内容丰富。2016 年底苏宁金融开启了红包系统及相关系统的项目开发。 本文将对苏宁金融红包系统的架构部署方式、演变过程、技术...

架构师springboot
8分钟前
2
0
Linux恢复误删除的文件或者目录

2017 年 2 月 1 日 GitLab 数据库被误删引起了广大争议. linux不像windows有个回收站,使用rm -rf *基本上文件是找不回来的。 那么问题来了: 对于linux下误删的文件,我们是否真的无法通过软...

Goopand
9分钟前
0
0
从NeurIPS 2018看AI发展路线!

摘要: 从NeurIPS 2018看AI发展路线! 去年9月份的时候,我发表过一份技术报告,阐述了我认为人工智能最重要的挑战,大概有以下四个方面: ·可伸缩性(Scalability)计算或存储的成本不与神...

阿里云官方博客
10分钟前
0
0
快速入门:selenium自动化测试+ubuntu系统+php语言+firefox/chrome浏览器

前言 selenium可用于界面UI自动化测试,因此也可用于来做一些自动化方面的事情。下面简单总结概括一下,对于一位新手,学习和使用selenium的基本过程。 本文只要针对:selenium自动化测试+ub...

暗夜在火星
12分钟前
0
0
List集合知识总结

转载: 一:集合的概念 集合:保存数量不确定的数据,以及保存具有映射关系的数据的容器,简单的理解就是用于存储数量不等的多个对象的容器。 集合和数组不一样,数组元素既可以是基本类型的值...

小橙子的曼曼
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部