web-dev-qa-db-ja.com

Ext.eachを中断または続行する方法

Ext.each(boundsExtend, function(value)
{
    if(value != record.ID) break;
});

では、Ext.eachループを中断または継続するにはどうすればよいですか?

22
dfilkovi

docs から:

指定された関数がfalseを返す場合、反復は停止し、このメソッドは現在のインデックスを返します。

OPの例のように(recordがスコープ内にあり、nullでないと仮定):

Ext.each(boundsExtend, function(value) {
  if (value != record.ID) {
    return false;
  }
  // other logic here if ids do match
});

falseを返すとループが完全に終了するため、この場合、最初の一致しないレコードは追加のチェックをバイパスします。

しかし、私があなたが本当にやろうとしていることは、一致するレコードを見つけるまでループするuntilであり、いくつかのロジックを実行してから、ループ。その場合、ロジックは実際には次のようになります。

Ext.each(boundsExtend, function(value) {
  if (value === record.ID) {
    // do your match logic here...
    // if we're done, exit the loop:
    return false;
  }
  // no match, so keep looping (i.e. "continue")
});

明示的にfalseではない他の値(デフォルトではnullなど)はループを続行します。

42
Brian Moeskau
var countries = ['Vietnam', 'Singapore', 'United States', 'Russia'];

Ext.Array.each(countries, function(name, index, countriesItSelf) {
    console.log(name);
});

Ext.Array.each(countries, function(name, index, countriesItSelf) {
if (name === 'Singapore') {
    return false; // break here
}
});
4
Anoop Pete

falseを 'break'に戻し、false以外のものを 'continue'に戻します。

var array = [1, 2, 3];
Ext.each(array, function(ele){
    console.log(ele);
    if(ele !== 2){
        return false;  // break out of `each` 
    }
})

Ext.each(array, function(ele){
     console.log(ele);
    if(ele !== 3){
        return true; // continue
    }
})
1
39ecneret