foreach break_JS多层for循环break或continue到具体层

5975af0ae5a372268058429e3213fcda.png

loop

场景

多层嵌套循环时候,需要控制指定层。

这个内容很早以前就入笔记了,但是一直很少用到,今天刚好碰到一个很复杂的数据结构,就把源码拿出来大家看一下,方便学习。

下面是生成器,不是最终代码哦……


关键源码

areas.forEach(area => { let topRow = area.topRow let seatRows = area.seatRows seatRows.forEach(seatRow => { out: for(let i = seatRow.start; i <= seatRow.end; i++) { if(seatRow.emptys) { let emptys = seatRow.emptys for(let j = 0; j < emptys.length; j++) { let empty = emptys[j] if(empty === i) continue out } } seats.push({ top: topRow, left: i, name: '', status: '', seat_type: '', }) } topRow++ })})

这里实现的是座位排布的核心逻辑层,当然可能还没优化好,主要说下主题嘛~

具体各个层级的代码部分截图如下:

生成器

17dabe9bba3c82659e40c9c607ad0983.png

生成器

各区域座位表

034055a9048e9223be5d88f8c92763f1.png

座位表

emptys 就是无座位的地方。

因为要做好自动渲染,所以里面穿插了许多辅助字段,让手工代码尽可能的小一点。

效果如下(目前):

f72ff1a300d2ea4de77f59866ef656eb.png

手机端效果

具体业务逻辑不做梳理,讲一下主题问题:

一、渲染每行是从左往右按照区域字段start与end来循环。

二、每行都有可能有一些空的座位,那么具体空的放到了一个数组emptys里面。

三、所以需要在循环里面在循环看一下是否是空的位置,如果是则进行后续操作,不把当前位置放进去。

out:for(let i = seatRow.start; i <= seatRow.end; i++) { if(seatRow.emptys) { let emptys = seatRow.emptys for(let j = 0; j < emptys.length; j++) { let empty = emptys[j] if(empty === i) continue out } } seats.push({ top: topRow, left: i, name: '', status: '', seat_type: '', })}

就是上面这个代码了。

标记就是第一行的那个out,注意带个冒号':',然后到符合条件的地方使用continue out即可。

如果是break,那么就是break out,即跳出结束外层循环,不带就是结束当前层循环。


注意:仅对常规for循环有效,foreach等均无效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值