各ループ内で「続行」する方法:アンダースコア、node.js


80

node.jsのコードは十分に単純です。

_.each(users, function(u, index) {
  if (u.superUser === false) {
    //return false would break
    //continue?
  }
  //Some code
});

私の質問は、superUserがfalseに設定されている場合、「いくつかのコード」を実行せずに次のインデックスに進むにはどうすればよいですか?

PS:私はelse条件が問題を解決することを知っています。答えを知りたいのですが。

回答:


137
_.each(users, function(u, index) {
  if (u.superUser === false) {
    return;
    //this does not break. _.each will always run
    //the iterator function for the entire array
    //return value from the iterator is ignored
  }
  //Some code
});

_.forEach「ループ」を早期に終了したい場合は、lodash(アンダースコアではない)をreturn false使用すると、iteratee関数から明示的に実行でき、lodashはforEachループを早期に終了することに注意してください。


なぜこれが当てはまらないのですか?developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
コンAntonakos

6
なぜなら_.each、通常のfor () {}ループは同じものではないからです。
Peter Lyons

あなたが使用する場合@ConAntonakosはfor-each(collection, callback)JSで内部ループのための任意の存在しないcallbackので、break/continue適用されません。
pgpb.padilla 2015年

12

continueforループのステートメントの代わりにunderscore.jsのreturnステートメントin_.each()を使用すると、現在の反復のみがスキップされます。


0
_.each(users, function(u, index) {
  if (u.superUser) {
    //Some code
  }
});

ごめんなさい。シナリオを詳しく説明しておくべきだった。スーパーユーザーがfalseの場合は、コードを実行して続行する必要があります。別の条件があります。たとえば、(superUser!= false && Activated)で何か他のことをして「いくつかのコード」を実行する必要があり、次に「いくつかのコード」を実行する必要がある場合です。ifとelseの両方で同じコードを書き直さずにそれを行う方法があるかどうかを知りたかっただけです。このために別の関数を作成したくありません。

1
彼は、矢印コードの非常に貧弱な慣行を回避する方法を尋ねていました。
David Betz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.