7

有没有办法打破 Ember 中的 forEach 迭代器?

我试图在回调(a la jQuery)中返回 false,但它不起作用。

谢谢!PJ

4

5 回答 5

13

您可以使用Array#someArray#every

[1,2,3].some(function(element) {
    return true; // Break the loop
});

[1,2,3].every(function(element) {
    return false; // Break the loop
});

更多信息here

于 2013-02-25T20:17:57.273 回答
7

如果可用, Ember 使用本机Array.prototype.forEach,如果不可用,则模拟它。请参阅https://github.com/emberjs/ember.js/blob/v1.0.0-rc.1/packages/ember-metal/lib/array.js#L45

JavaScriptforEach不支持中断。请参阅https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach

于 2013-02-25T18:29:48.853 回答
0

不,我不这么认为 cfr James,查看foreach代码,您可以看到它在引擎盖下使用了 for 循环。您可以抛出异常,但这就像编写意大利面条代码一样。但有可能,您可以在 github 上提出功能请求?或者编写您自己的实现来中断 for 循环。

于 2013-02-25T18:37:56.137 回答
0

使用toArray可能会删除数组的顺序,这有点违背了目的。您可以使用普通的 for 循环,但使用objectAt它来使其适合您。

var emberArray = [ ... Array of Ember objects ... ],
    min = 3,
    max = emberArray.get('length'),
    targetObject;

for( var i = min; i < max; i++ ){
    targetObject = emberArray.objectAt( i );

    if( targetObject.get('breakHere') ) {
        break;
    }
}

这有一个额外的好处是允许您从某个索引开始,因此您可以循环遍历最少数量的项目。

于 2014-07-31T03:24:47.277 回答
0

使用Array#find并返回 true 以跳出循环。

于 2014-06-26T19:48:07.183 回答