2016-09-17 5 views
0

オブジェクトの配列を反復処理し、メソッドを呼び出したいとします。そのメソッドの結果が何らかの条件を満たす場合。私はすぐにその結果を返したい。私はこれを書いた:Lodash、ループ内で関数を呼び出し、最初に一致する結果を返します。

public getFirstMatch(value: string, allValues: string[]): Result { 
    let foundResult = undefined; 
    _.find(this.myArrayofMatchers, matcher => { 
     let result = matcher.isMatch(value, allValues); 
     if(result.isMatch){ 
      foundResult = result; 
      return true; 
     } 
    }) 

    return foundResult || new Result(false); 
} 

それは動作しますが、それはclunkyと不明なようです。 _.find、imhoは実際のmatcherを気にしないので、私がやろうとしていることの明確な指標ではありません。事実foundResultが存在する必要があるのは、私がかなり醜いと感じるものです。そして、それは長くなる必要があるようです。 ここでもっとうまくいくものはありますか?これにはより良いlodash関数がありますか?

はなお、ここであなたが_.foreachよう_.findを使用しているループ

public isMatch(value: string, allValues: string[]): Result { 
    for (let i = 0; i < this.myArrayofMatchers.length; i++){ 
     let result = this.myArrayofMatchers[i].isMatch(value, allValues); 
     if (result.isMatch) { 
      return result; 
     } 
    } 
    return new Result(false); 
} 
+0

は(_myArrrayのVARマッチャ)のために ''作業していますか? – georg

+0

@georg foreachを意味しますか?私はロダッシュの使用がより良い習慣であると聞きました。私は効率について懸念しています(私は、愚かな言語の選択を知っています)。 'for(let i = 0; i

+1

いいえ、あなたの2番目のスニペットとまったく同じように動作する 'for..of'ループを意味します。通常の言語構造が動作する場合、ライブラリを使用する必要はありません。 – georg

答えて

1

のために使用して、私が念頭に置いていたものです。これは悪いです。 Lodashは戻り値を見つけるので、それを活用する必要があります。

あなたの方法は次のようになります。

public getFirstMatch(value: string, allValues: string[]): Result { 
    const foundResult = _.find(
     this.myArrayofMatchers, 
     matcher => matcher.isMatch(value, allValues).isMatch 
    ); 

    return foundResult || new Result(false); 
} 
関連する問題