2017-09-18 1 views
1

Ich versuche den Unterschied zwischen RXJS Rupfen und Karte zu verstehen.RXJS Unterschied zwischen Pluck und Map

Kann mir jemand dabei helfen?

Geschätzt

+1

Haben Sie die Dokumentation lesen:

Beispiel aus genommen? Probiere sie aus? Welche spezifische Frage hast du noch? – jonrsharpe

+0

Dies ist eine absolut gültige Frage, die es wert ist, diskutiert zu werden. –

Antwort

1

Wie @ mgm87 sagte Sie eine Operation mit map ausführen können. Auf der anderen Seite nimmt pluck nur einen Wert.

Zum Beispiel mit der Karte kann man so etwas tun:

this.http.get('...some api url to get a user...') 
    .map(response => response.json()) 
    .map(user => user.age > 18 ? 'major': 'minor') 
    .do(isMajorOrMinor => console.log(isMajorOrMinor)) 

So können Sie Ihre Daten in der Kette auch bedingt manipulieren.

ABER, für mich ist einer der großen Unterschiede, dass map is typed. Was bedeutet, wenn Sie einige Daten haben wir sagen:

interface IUser { 
    name: string; 
    age: number; 
    dogs: IDog[]; 
} 

Und Sie irgendwann ein Benutzer erhalten, von dem man seine Hunde erhalten möchten:

user$ 
    .map(user => user.dogs) 
    .do(dogs => ...) // here, you do NOT need to precise (dogs: IDog[]) because Typescript will make a type inference 

Und das ist, warum ich immer bin Verwenden der Karte sogar um nur einige Daten zu "pflücken".

-2

Sie sind sehr ähnlich, aber wie ich es verstehe, mit einer Reihe Karte arbeitet während zupfen die Werte von einem Objekt nimmt.

This is the place to go for specifics.

+0

Sie denken an Array.map, nicht an Observable.map. Auch https://meta.stackexchange.com/q/225370/248731 – jonrsharpe

0

Map kann eine Operation auf jedem ausgesendeten Wert durchzuführen. http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-map https://www.learnrxjs.io/operators/transformation/map.html

// value from observable = 10 
map(x => 10*x) 
// value from map = 100 

Zupfen einfach nimmt eine der verschachtelten Eigenschaften jedes ausgesendeten Wert. http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-pluck https://www.learnrxjs.io/operators/transformation/pluck.html

// value from observable = {p = 10, w = 100} 
pluck('p') 
// value from pluck = 10 
2

Die docs sagen

Pluck: Wie Karte, aber bedeutete nur für jedes emittierten Objekt eines der verschachtelten Eigenschaften Kommissionierung.

Deshalb sagen wir, Sie haben

[{ name: 'Joe', age: 30, job: { title: 'Developer', language: 'JavaScript' }, 
{ name: 'Sarah', age: 35 }] 

und Sie möchten eine Liste aller Berufsbezeichnungen.

map Verwendung wäre eine Art Schmerz (wegen der NULL-Zulässigkeit von job), aber mit ‚rupfen‘ Sie können pluck('job', 'title') schreiben und es wird den Baum für job.title Suche durchlaufen - und wird nicht fehlschlagen, wenn job null ist.https://www.learnrxjs.io/operators/transformation/pluck.html

https://jsfiddle.net/btroncone/n592m597/

Verwandte Themen