JavaScript break跳出多重循环
博客专区 > 文文1 的博客 > 博客详情
JavaScript break跳出多重循环
文文1 发表于1年前
JavaScript break跳出多重循环
  • 发表于 1年前
  • 阅读 24
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

多重循环在编程中会经常遇到,那么在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,会跳出所有循环

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 12
博文 278
码字总数 105058
×
文文1
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: