Javascript 打破PrototypeJS.each()循环

Javascript 打破PrototypeJS.each()循环,javascript,prototypejs,Javascript,Prototypejs,在这个精心设计的示例中,我有一个包含3个元素的数组,我正在使用该方法循环它 如果需要,我可以很容易地从.each()调用的函数中返回 我的问题是,如何从.each()调用的函数内部打破.each()循环? if( val == 'bar' ) { throw $break; } 它记录在您链接的同一页上。它是由每个函数专门处理的异常。抛出时,它会阻止对其他元素调用您的函数。您的操作是正确的,并且Prototype已经创建了一个对象($break),可以从每个函数中抛出该对象以启用此功能

在这个精心设计的示例中,我有一个包含3个元素的数组,我正在使用该方法循环它

如果需要,我可以很容易地从
.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;
 }