必威体育下载克里斯蒂安·海尔曼

_用标签减少循环迭代

星期五,4月28日,2006年下午1:48

只是一个快速提示,通过使用break和continue命令,您可以大幅减少循环迭代次数,还有一个标记循环的选项,允许嵌套循环停止其父循环的迭代。

松饼人斯图亚特·科维尔今天早些时候问我,在循环和中断中支持的标签是如何的,一开始我很困惑,因为我没有听说或者(更可能)忘记了这个特性。

通常情况下,你会有一个循环,然后通过它:

对于()=0(二)书信电报(二)200个(二)++(见表1)_
  如果 ()=10个 (见表1) _警觉的()'10'(见表1)(二)
  _
_

这将执行200次。如果你休息一下,它只执行10次:


对于(i=0;i<200;I++)
如果(i==10)
警报(“10”);
休息;
_

_

但是,如果必须嵌套循环,中断只会停止内部循环。以下示例仍将执行2200次:


对于(i=0;i<200;I++)
对于(j=0;J<200;J++)
如果(j==10)
警报(“10”);
休息;
_

_
_

现在,循环可以得到一个标签,后面跟一个冒号,这可以用来打破或继续不同的循环。以下示例只执行11次。


外部:用于(i=0;i<200;I++)
对于(j=0;J<200;J++)
如果(j==10)
警报(“10”);
打破外部;
_

_
_

使用标签可以极大地减少循环迭代,并使脚本更快。比如说你有一个JSON公司作为搜索结果的对象:


结果=
'css':
书籍:[
_

'标题':'防弹CSS',
“作者”:“dan cederholm”

_

'标题':'专业CSS',
'作者':'各种'

_

'标题':'Eric Meyer打开CSS',
“作者”:“Eric Meyer”
_

],
网址:[
_

'title':'css讨论',
“维护者”:“Eric Meyer”

_

'title':'simpleBits',
“作者”:“dan cederholm”

_

'标题':'456 Berea Street',
“作者”:“罗杰·约翰森”
_

]

“javascript”:
书籍:[
_

'title':'dom脚本',
“作者”:“Jeremy Keith”

_

'title':'以国内脚本和阿贾克斯',
“作者”:“Chri必威体育下载stian Heilmann”

_

'title':'javascript:最终指南',
“作者”:“David Flanagan”
_

]
_

_

如果将作者和媒体作为查询数据发送,例如,“Roger Johannson”和“Web”,您可以使用普通的嵌套循环:


对于(结果中的i)
对于(结果[i]中的var j)
对于(结果[i][j]中的var k)
if(结果[i][j][k]['作者']==作者)
警报(结果[i][j][k]['标题']);
_

_
_

_

这将被执行9次。如果你休息一下,你可以把它减到8倍。


对于(结果中的i)
对于(结果[i]中的j)
for(k in results[i][j])
if(结果[i][j][k]['作者']==作者)
警报(结果[i][j][k]['标题']);
休息;
_

_
_

_

如果在主循环上使用标签(例如“lookup”),并中断父循环而不是最里面的循环,这是5次迭代。


查找:用于(I in results)
对于(结果[i]中的j)
for(k in results[i][j])
if(结果[i][j][k]['作者']==作者)
警报(结果[i][j][k]['标题']);
中断查找;
_

_
_

_

如果还测试媒体并继续循环,则整个构造将执行2次。


查找:用于(I in results)
介质:用于(J in results[I]);
for(k in results[i][j])
如果(j!=介质)继续介质;
if(结果[i][j][k]['作者']==作者)
警报(结果[i][j][k]['标题']);
中断查找;
_

_
_

_

您可以在上看到所有函数和结果演示页面.

当然,另一种选择是不打破循环,但是,将lot放在自己的函数/方法中,并返回到主脚本并返回结果。然而,此技术可以在开始其他功能之前收集几个结果。

再一次,多亏了斯图尔特。其他资源:

在Twitter上分享