2017-08-24 22 views
1

なぜこれらの2つのコードが同様に動作しないのですか?lodash every()関数をRx.JSの引数として渡すmap()operator

const a = new Rx.Subject; 
const b = new Rx.Subject; 
a.combineLatest(b).map(merge => _.every(merge)).subscribe(r => console.log("r:", r)); 
a.next(true); 
b.next(true); 

出力:r: true

const a = new Rx.Subject; 
const b = new Rx.Subject; 
a.combineLatest(b).map(_.every).subscribe(r => console.log("r:", r)); 
a.next(true); 
b.next(true); 

出力:

r: falseは、これら2つの構文的に同等ではありませんか?

+0

私と同じように見えますが、デバッグ可能な例を提供できますか? – jontro

+0

@jontro map()演算子は2つの引数を持つ渡されたプロジェクター関数を呼び出し、何がlodashのevery()関数の動作を変更するのか、これらのスニッファーは同じではありません。 – Slav

答えて

2

質問の前に書かれた回答を一時的に削除しました。

ロダッシュevery2 argumentsを受け取ります(実際には3 of themがあります)。

アレイmapコールバックは3 parametersです。

最初の引数(値)でeveryを呼び出すと、everyが呼び出され、それはカウントされない引数で呼び出され、その動作が変更されることを考慮してください。

既存の関数をコールバックとして提供するのは慣習ですが、注意が必要です。これは、例えば、機能だけで1引数またはそれらの残りの部分は結果に影響しない受け入れることを確認するために知られていた場合にのみ許容です:

const stringArray = array.map(String); 

ことに疑問がある場合は、ラッパー関数を代わりに使用する必要があり、例:

// will produce unexpected results because parseInt has 2 params 
// const numberArray = array.map(parseInt); 
const numberArray = array.map(str => parseInt(str)); 
0

私の悪い、これらsnippersは同じではありません:マップ()演算子はlodash」ごとに()機能の動作を変更するもの、引数で渡されたプロジェクター機能を呼び出します。

関連する問題