首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >跳出PrototypeJS .each()循环

跳出PrototypeJS .each()循环
EN

Stack Overflow用户
提问于 2009-06-25 18:21:20
回答 4查看 11.4K关注 0票数 17

在这个非常巧妙的例子中,我有一个包含3个元素的数组,我使用.each()方法遍历了它。

var vals = $w('foo bar baz'); 

vals.each( function(val) {
    alert(val);

    if( val == 'bar' ) {
        //This exits function(val)
        //but still continues with the .each()
        return;
    }
});

如果需要,我可以很容易地从.each()调用的函数中返回。

我的问题是,如何从.each() .each() 调用的函数内部跳出循环?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-25 18:25:40

if( val == 'bar' ) {
    throw $break;
}

它在你链接的同一页上有说明。这是一个由each函数专门处理的异常。当抛出时,它会阻止对其他元素调用您的函数。

票数 33
EN

Stack Overflow用户

发布于 2009-06-25 18:26:07

您是对的,Prototype已经创建了一个对象($break),可以从each-function抛出该对象来启用此功能。根据原型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]

您可以在此处阅读有关每个函数的更多信息:http://www.prototypejs.org/api/enumerable/each

票数 7
EN

Stack Overflow用户

发布于 2009-06-25 18:26:18

根据您链接到的.each()文档,您应该使用throw $break;语句,这应该会导致进一步的迭代停止。

简单地返回将导致迭代器继续执行下一步。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1045452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档