2017-01-25 1 views
1

、最新バージョンlodash - 私は、次の作業のコードはlodashと書かれているの連鎖フィルタとのforEach

  _.forEach(_.filter($ctrl.data, ['x', 'y']), function (elem) { 
       ... 
      }); 

私はチェーンにこれを変換しようとすると、それはforEach内のブロックのコードを実行することはありません。

  _.chain($ctrl.data) 
       .filter(['x', 'y']) 
       .forEach(function (elem) { 
        ... 
       }); 

なぜですか?

+0

console.log '_.chain($ ctrl.data).filter(['x'、 'y'])'、それは何を返しますか? – Dani

+0

私は '_.chain($ ctrl.data).filter(['x'、 'y'])。value()'を使用してデバッグし、フィルタされた配列を期待どおりに返します。 – tzortzik

+0

次に、 '_.chain($ ctrl.data).filter(['x'、 'y'])。()。forEach(function(elem){..}); ' – Dani

答えて

1

_.chain($ctrl.data)の代わりに_($ctrl.data)を使用して問題を解決しました。ここでの主な違いは、lodashのグローバル関数が_.value()の最後に「ターミネータ関数」を持つときに呼び出されるということです。

_.chainを使用している同等のものは、を_.forEach()の前に明示的に呼び出すことです。しかし、私の考えでは、forEachは「ターミネーター機能」であるため、問題が何であるか把握できません。

1

同様の問題が発生しました。私は_(blah)の構文を使用していましたが、私はまだ問題を抱えていました。私の場合は

は、コードは次のように見えた:

_(items).forEach((x) => doSomething(x)); 

それはdoSomethingbooleanを返したが判明しました。私はlodashがこの戻り値を見て、forEachmapと同じに扱い、評価していないと思います。しかし、私は最後にvalue()をタックしてみました。実行時にvalue is not a functionエラーが発生します。私の場合は

は、問題がdoSomething呼び出しをラップすることによって解決された:

_(items).forEach((x) => { doSomething(x); }); 

は、より多くの何よりもバグのように思えます。

関連する問題