Disons que j'ai un observable qui donne un objet de 3 tableaux comme celui-ci:
results1 = { type1: [1, 2], type2: ['ab', 'cd'], type3: ['foo', 'bar'], }; results2 = { type1: [3, 4, 5], type2: ['ef', 'gh', 'ij'], type3: ['ban', 'jo', 'vi'], }; final_results = { type1: [1, 2, 3, 4, 5], type2: ['ab', 'cd', 'ef', 'gh', 'ij'], type3: ['foo', 'bar', 'ban', 'jo', 'vi'], };
Existe-t-il un opérateur rxjs qui me permet de combiner plusieurs observables et leurs résultats afin d'avoir un résultat final comme celui-ci:
results = { type1: [...], type2: [...], type3: [...], };
??????
Pour mémoire, j'utilise Angular 2+ et dactylographié, et je veux continuez à utiliser les flux observables et les opérateurs rxjs, mais d'après leur documentation, je ne suis pas sûr qu'ils soient ceux qui pourraient faire quelque chose comme 'deep merging ??'
Merci de votre aide
3 Réponses :
Ce n'est pas lié à l'observable, c'est du vieux Javascript.
Le seul opérateur que vous devez connaître est combineLatest
:
combineLatest(results1$, results2$).pipe( map((results1, results2) => { const ret = {}; Object.keys(results1).foreEach(key => ret[key] = results1[key].concat(results2[key])); return ret; }) ).subscribe(res => console.log(res)); // should display your expected result
Ne vous y trompez pas: les opérateurs RxJS manipulent le flux (l'Observable lui-même ), pas les données qu'il contient.
Si vous souhaitez gérer les données internes, cela devient Javascript.
vous pouvez utiliser l'opérateur réduire pour agréger un seul résultat parmi plusieurs valeurs émises. C'est à vous de fusionner les tableaux simples car cela n'est pas lié à rxjs
Exemple simple: https://stackblitz.com/edit/angular-cffyyh < / p>
Vous recherchez l'opérateur de scan:
https://www.learnrxjs.io/operators/transformation/scan.html
Il est similaire à l'opérateur reduction , mais l'opérateur de réduction sera émettre uniquement à la fin du flux. L'opérateur d'analyse émettra la valeur intermédiaire à chaque fois.
Il existe plusieurs opérateurs qui peuvent fusionner les données de deux observables, mais la concaténation des valeurs est quelque chose de logique. Vous pouvez utiliser l'un des opérateurs pour fusionner les données et les concaténer manuellement.