在enumerable.each迭代中中断函数

时间:2010-07-19 20:33:42

标签: javascript prototypejs

我有一个Prototype类 - 在类中我调用一个函数,在这个函数中我做enumerable.each迭代。如果此迭代中的元素未通过检查,则调用另一个函数,然后稍后重新调用此相同的函数。我可以在这个迭代中破解,这样不仅迭代结束,而且函数内没有任何其他东西被调用。

说这个代码我不希望在elm.something == 'whatever'时调用console.log。显然我可以设置一个变量,然后在函数后检查这个,但是还有其他我应该做的事情吗?

myFunction: function(el){
    el.each(function(elm){ 
        if(elm.something == 'whatever'){
            this.someOtherFunction(elm);
        }
    },this);            
    console.log("i dont want this called if elm.something == 'whatever'");
}

为了清楚起见,在这种情况下,console.log只是占位符代码,用于在此循环之后执行的一些额外逻辑的开头

2 个答案:

答案 0 :(得分:2)

最简单的方法是避免使用each(),而是使用for循环重写:

myFunction: function(el){
    for(var i in el) {
      var elm = el[i];
        if(elm.something == 'whatever'){
            return this.someOtherFunction(elm);
        }
    }
    console.log("i dont want this called if elm.something == 'whatever'");
}

答案 1 :(得分:2)

你自己回答了 “显然我可以设置一个变量,然后在函数”

之后检查它

在这种情况下,你基本上不打算调用console.log,即使elm.something =='what'对于单个'elm'

myFunction: function(el){
    var logIt = true;
    el.each(function(elm){ 
        if(elm.something == 'whatever'){
            logIt = false;
            this.someOtherFunction(elm);
        }
    },this);            
    logIt && console.log("i dont want this called if elm.something == 'whatever'");
}