7

EmberのforEachイテレータから抜け出す方法はありますか?

コールバック(a la jQuery)でfalseを返そうとしましたが、機能しません。

ありがとう!PJ

4

5 に答える 5

13

Array#someまたはを使用できますArray#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

いいえ、私はそうは思いません。cfrJamesは、foreachコードを見ると、内部でforループを使用していることがわかります。例外をスローすることもできますが、それはスパゲッティコードを書くようなものです。しかし、それは可能かもしれません、あなたはgithubで機能リクエストをすることができますか?または、forループを中断する独自の実装を記述します。

于 2013-02-25T18:37:56.137 に答える
0

Array#findを使用し、trueを返すと、ループから抜け出します。

于 2014-06-26T19:48:07.183 に答える
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 に答える