angular - 将 rxjs 与 http observable 一起使用时遇到问题
问题描述
我正在做一个简单的 http 调用并获取一组对象
getFruit():Observable<Fruit[]> {
return this.http.get<Fruit[]>(URL);
}
水果对象是
export class Fruit {
public name: string;
public color: string;
}
当我尝试在管道中分组或执行任何操作时,问题代码如下:
fruitService.getFruit().pipe(
groupBy(f => f.color),
mergeMap(group => group.pipe(toArray()))
);
但是,当我尝试使用 rxjs groupBy 时出现错误;
Property 'color' does not exist on type 'Fruit[]'
解决方案
groupBy
作用于每个发出的值,当你使用 http 客户端时,它会发出一个值,一个数组,它自己的数组没有颜色属性
如果您希望按颜色对结果进行分组,您只需像使用任何数组一样映射它。
一种方法是使用Array.reduce
,例如:
this.fruits$ = this.fruitService.getFruit().pipe(
map(fruits => {
const key = 'color';
return fruits.reduce((allFruits, fruit) => {
(allFruits[fruit[key]] = allFruits[fruit[key]] || []).push(fruit);
return allFruits;
}, {});
})
)
*从这里复制reduce实现
推荐阅读
- django - 根据条件显示具有浮点格式的变量
- matlab - MATLAB 电子邮件正文包括文本和表格
- javascript - 突出显示包含单词的表格行并导出到 excel
- jenkins - 我们如何从 jenkins 获取所有凭据作为环境变量?
- android - Firebase 错误:com.firebase.ui.database.ClassSnapshotParser.parseSnapshot
- r - 如何在 highcharts 中获得正确的印度地图?
- sql - 将密钥附加到 JSON_OBJ_COLUMN - Oracle
- jquery - 使用 jQuery 列出产品
- oauth-2.0 - 如何创建使用 Oauth 2.0 密码授权运行的守护程序应用程序?
- oracle - Oracle Managed Driver 19.11.0 使用特定长度的字符串引发错误