Javascript 打破PrototypeJS.each()循环
在这个精心设计的示例中,我有一个包含3个元素的数组,我正在使用该方法循环它 如果需要,我可以很容易地从Javascript 打破PrototypeJS.each()循环,javascript,prototypejs,Javascript,Prototypejs,在这个精心设计的示例中,我有一个包含3个元素的数组,我正在使用该方法循环它 如果需要,我可以很容易地从.each()调用的函数中返回 我的问题是,如何从.each()调用的函数内部打破.each()循环? if( val == 'bar' ) { throw $break; } 它记录在您链接的同一页上。它是由每个函数专门处理的异常。抛出时,它会阻止对其他元素调用您的函数。您的操作是正确的,并且Prototype已经创建了一个对象($break),可以从每个函数中抛出该对象以启用此功能
.each()调用的函数中返回
我的问题是,如何从.each()
调用的函数内部打破.each()
循环?
if( val == 'bar' ) {
throw $break;
}
它记录在您链接的同一页上。它是由每个函数专门处理的异常。抛出时,它会阻止对其他元素调用您的函数。您的操作是正确的,并且Prototype已经创建了一个对象($break),可以从每个函数中抛出该对象以启用此功能。根据原型API文档:
在JavaScript中,可以使用break和continue语句对常规循环进行短路。但是,当使用迭代器函数时,代码不在循环范围内:循环代码发生在场景后面
为了向您提供等效的(尽管不是最优的)功能,Prototype提供了两个全局异常对象,$break和$continue。抛出这些语句相当于在普通循环中使用相应的本机语句。这些异常由each方法在内部正确捕获
另外,请注意,$continue对象已被弃用,若要模拟continue语句,请改用普通的return语句
代码示例:
var result = [];
$R(1,10).each(function(n) {
if (0 == n % 2)
return; // this equals continue
if (n > 6)
throw $break;
result.push(n);
});
// result -> [1, 3, 5]
您可以在此处阅读有关each函数的更多信息:根据链接到的的文档。each()
应该使用抛出$break代码>语句,这将导致进一步的迭代停止
简单地返回将导致迭代器继续到下一个迭代器。从您链接到的页面,这不是正确的方法
if(val == 'bar')
{
throw $break;
}
?Doh!看起来也有一个“throw$continue”。但是,“throw$continue”被弃用,取而代之的是一个简单的返回。我想指出的是,新文档页面现在没有这个信息,正如上面提到的那样,$continue被弃用,而且毫无意义。你可以回来。
if(val == 'bar')
{
throw $break;
}