文档章节

JavaScript break跳出多重循环

文文1
 文文1
发布于 2016/11/27 22:37
字数 625
阅读 48
收藏 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
粉丝 19
博文 340
码字总数 114952
作品 0
长沙
程序员
JavaScript 基础 --- (数据类型/循环/条件)

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

姜白告
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
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
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
47分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
48分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部