2017-04-25 8 views
1

は、私は複数のムービーで配列を持っていると言うことができますが、これらのムービーオブジェクトはJavascriptの連鎖を一緒に方法

...タイトル/評価/などのようなものが含まれています8.0よりも上のムービーのみを返し、新しいオブジェクトのTitleとRatingだけを返します。

私の混乱は...どちらが正確に最初に走っているのですか?最初にマップが実行されてからフィルタを通過するか、最初にフィルタが実行されてから地図が実行されます(どのようにレイアウトされていても奇妙に見えます)。

チェーンの方法を一緒にするときは、どのようにチェーンに従うの?また、objのメソッド間を渡すことは同じである必要がありますか?そうでなければ、実際にどのように実際に動作するのか本当に混乱しています。

+0

他のものと同様に、順番に実行されます。フィルターされた配列に対して 'map'が呼び出されます。私は混乱を理解しているか分からない。最初の呼び出しはオブジェクトを返し、後続の関数は前の関数から返されたものに呼び出されます。 –

+0

関数を連鎖するとき、各関数は前の関数の戻り値を呼び出しています。 –

答えて

4

彼らは、チェーンと、彼らがしているために、正確に実行し、あなたがこのようにそれを書き換える場合、それはもう少し明らかです:。

let a = arr.filter(function(obj){ 
    return obj.Rating > 8.0; 
}); 

let b = a.map(function(obj){ 
    return {title: obj.Title,rating: obj.Rating}; 
}); 

filterが最初に起こるとaになり、その後、aで呼び出されmap結果はbになります。

連鎖機能は同じですが、ステップごとに変数を作成するステップをスキップしているだけです。

+0

これは完璧な例です!私はおそらく各要素がフィルタTHENマップを通過したと思っていましたが、最初にすべてのフィルタを行い、次にマップに残ったものを渡します。すばらしいです! – msmith1114

1

filterが最初に実行され、map秒が実行されます。 mapが引数として受け取ったもの:filterが返されました。

+0

受け取った引数は、一度に各要素であり、正しくフィルタリングされた配列全体ではありませんか? – msmith1114

+0

2番目の関数は、前の関数から返された結果全体を受け取ります。あなたの例では、 'filter'はフィルターされた配列を返し、' map'はフィルターされた配列全体を受け取り、この配列の各要素をコールバックの引数としてコールバック関数を呼び出します。 – wostex

関連する問題