gpt4 book ai didi

typescript - 如何使用一个可观察对象的输出来过滤另一个

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:44 25 4
gpt4 key购买 nike

所以我有两个可观察对象,一个返回当前类别,另一个返回产品。我希望根据类别过滤产品。

这是在 Angular 2 中,所以我真的希望我的 ng2-view 成为订阅者(通过异步管道)。

类似于这个简单的例子:

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return products$
.toArray()
.filter(prod => {
return prod.cat_id.some(id => id === <how do I get the value of the category observable here?>)
});

也许答案很简单,但它让我望而却步。

最佳答案

您需要加入这两个流,例如与 combineLatest :

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return Observable.combineLatest(products$, category$)
.map(([products, category]) => {
return products.filter(prod => prod.cat_id.some(id => id === category.id);
});

更新

正如@olsn 在 Observable.from 中指出的那样,您得到的是事件流,而不是事件数组流。因此解决方案应该是:

let category$ = Observable.of({id: 1});
let products$ = Observable.from([{name: 'will be included', cat_ids: [1, 5]}, {name: 'nope', cat_ids: [2, 3]}, {name: 'also yep', cat_ids: [1, 7]}]);

return Observable.combineLatest(products$, category$)
.filter(([product, category]) => {
return product.cat_id.some(id => id === category.id);
})
.map(([product, category]) => product);

关于typescript - 如何使用一个可观察对象的输出来过滤另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com