我正在尝试找到使用filter()
运算符的最干净的解决方案,以便过滤我的observable。
我在这里复制服务电话以分别获得femaleList
export class MyComp implements OnInit {
maleList: IContact[] = [];
femaleList: IContact[] = [];
constructor(private _contactService: ContactService) { }
ngOnInit() : void {
this._contactService.getContacts()
.filter(male => male.gender === 'M')
subscribe(maleList => this.maleList = maleList);
this._contactService.getContacts()
.filter(female => female.gender === 'F')
subscribe(femaleList => this.femaleList = femaleList);
} }
Contactlist
[{
"id" : 1,
"name" : "Todd",
"gender" : "M"
}, {
"id" : 2,
"name" : "Lillian",
"gender" : "F"
}]
RxJS运算符中是否有任何选项可以使用单个observable分配给两个变量。
如何使用 RxJS maleList
运算符过滤联系人并将其分配给femaleList
和filter()
。
提前致谢
答案 0 :(得分:2)
您不需要过滤器:
def afficherListe(A):
n=len(A)
B=[]
for i in range (0,n,1):
for j in range (0,n,1):
if i!=j:
B.append(A[i][j])
return B
答案 1 :(得分:1)
如果您想使用单个Observable并使用两个不同的观察者订阅它,您需要使用share()
或shareReplay()
(现在只有.publishReplay().refCount()
才能使用let data = [{
"id" : 1,
"name" : "Todd",
"gender" : "M"
}, {
"id" : 2,
"name" : "Lillian",
"gender" : "F"
}];
let maleList = [];
let femaleList = [];
let source = Observable.defer(() => {
console.log('Observable.defer');
return Observable.from(data);
})
.publishReplay()
.refCount();
source
.filter(male => male.gender === 'M')
.toArray()
.subscribe(list => maleList = list);
source
.filter(male => male.gender === 'F')
.toArray()
.subscribe(list => femaleList = list);
console.log('maleList', maleList);
console.log('femaleList', femaleList);
1}})(参见https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/publish.md和https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/sharereplay.md)。
Observable.defer
maleList [ { id: 1, name: 'Todd', gender: 'M' } ]
femaleList [ { id: 2, name: 'Lillian', gender: 'F' } ]
查看现场演示:https://jsbin.com/hapofu/edit?js,console
打印到控制台:
source
这两个订阅者都与source
共享相同的连接,同时响应是#34;重播" (如果您在首次发布后进行订阅,则会重新发送而不再订阅filter()
)。
请注意,toArray()
中的项目是一次发出的。这就是我使用maleList.push()
收集所有值并将它们重新发送为单个数组的原因。或者我可以打电话给例如。每个值filter()
。
顺便说一句,您还可以使用partition()
运算符代替insertOne()
来避免创建两个订阅。
答案 2 :(得分:0)
你可以使用lodash:
.partition(collection,[predicate = .identity]);
https://lodash.com/docs/#partition
这将返回2个数组,其中一个值的值为false&另一个是真的。只需使用“性别”来构建评估。