J'utilise RXJS pour créer un système de recherche et de filtrage dans une application angulaire.
J'ai ce qui suit: p> avec la fonction utilitaire mais cela me grosse l'un ou l'autre observable. Donc, ma question est la suivante: p> Comment puis-je fusionner les deux observables et émettre que les valeurs communes aux deux tableaux? Où filtre parfois $ pourrait émettre un tableau de 30 éléments. Et parfois, recherchez $ pourraient émettre un tableau de 2 éléments seulement? P> IE: P> si code> être quelque chose comme: p>
Filtre $ code> Contient: p>
[{_id:'1', name:'jhon'},{_id:'4', name:'some random dude'}, {_id:'7', name:'bravo'}]
3 Réponses :
Quelque chose comme ça devrait fonctionner:
the Comme j'ai compris votre question, vous recherchez une intersection entre les Premier, utilisez Votre code devrait ressembler à ce que ceci: p> Vous pouvez vérifier le code d'exécution complet dans comparer code> fonction de
DisponNUntilchanged code>
opérateur est utilisé pour indiquer si l'émission précédente est différente de celle de l'émission actuelle. recherche code> et
filtre code>. P>
Combinelaest code>
opérateur à être averti à chaque fois que recherche $ code> de
Filtre $ code> EMITS.
Ensuite, vous pouvez utiliser quelque chose comme Lodash's intersectionwith code>
pour obtenir L'intersection des tableaux. p>
Vous pouvez réellement y parvenir avec JavaScript simple.
p>
const myData$ = combineLatest(this.search$.asObservable(), this.filters$.asObservable()).pipe( map(([filterArr, searcheArr]) => filterArr.filter(userFilter => searchArr.some(userSearch => userFilter._id == userSearch._id))) )