我有一个如下所示的对象数组:
private questions: Question[] = [
{
title: "...",
category: "Technologie",
answer: `...`
},
{
title: "...",
category: "Technologie",
answer: `...`
},
{
title: "...",
category: "eID",
answer: `...`
}
];
我想按类别对它们进行分组,根据值过滤它们并将结果作为数组返回。目前,我正在使用这个:
Observable
.from(this.questions)
.groupBy(q => q.category)
.map(go =>
{
let category: Category = { title: go.key, questions: [] };
go.subscribe(d => category.questions.push(d));
return category;
})
.filter(c => c.title.toLowerCase().indexOf(value.toLowerCase()) >= 0 || c.questions.filter(q => q.title.toLowerCase().indexOf(value.toLowerCase()) >= 0).length > 0)
.toArray()
这会找到具有类别标题中的值的问题,但不会找到具有问题标题中的值的问题。我想那是因为我正在使用subscribe
in map
,因此,这些问题在filter
方法,所以我想知道是否有可能等待subscribe
在进入之前结束filter
。我的研究指出flatMap
但我无法让它做我想做的事。
EDIT
我发现我可以这样解决这个问题:
Observable
.from(this.questions)
.filter(q => q.category.toLowerCase().indexOf(value.toLowerCase()) >= 0 || q.title.toLowerCase().indexOf(value.toLowerCase()) >= 0)
.groupBy(q => q.category)
.map(go =>
{
let category: Category = { title: go.key, questions: [] };
go.subscribe(d => category.questions.push(d));
return category;
})
.toArray()
但我仍然对答案感兴趣。