我正在过滤JSON对象数组,我想基于传入的id
参数返回找到的对象。
getClient(id) {
return this.http.get<any>(' http://localhost:3000/clients')
.pipe(
filter(client => client.idNumber === id)
);
}
上面的观察者不会被触发,并且不会接收任何数据。
getClient(id)
.subscribe(
(data) => {
// nothing here
}
)
下面的实现getClient
实现了我想要的。
getClient(id) {
return this.http.get<any>(' http://localhost:3000/clients')
.pipe(
map(clients => clients.find(client => client.idNumber === id))
);
}
我想了解一下,我使用过滤器运算符的方式是否错误?我的用法与这里的用法有何不同
正确,您filter
以错误的方式使用rxjs运算符。
根据文档:
通过仅发出满足指定谓词的项来过滤由源发出的项。
在您的示例中,client
发送到过滤器的值是您的http请求返回的客户端数组。然后,您说的是“不要发出任何东西,除非client
(它实际上是一个数组并且没有“ idNumber”属性等于id
,它始终为false,因为unefined !== number
如果要修改,则需要使用map
运算符。映射运算符采用可观察对象发出的内容,让您执行某些操作(例如过滤或在数组中查找),然后将修改后的数据返回给订户。
另外,如果您键入响应属性,TypeScript会警告您。而不是this.http.get<any>
使用this.http.get<Client[]>
或更合适的类型。您将能够在编译时看到Client[]
没有属性的对象idNumber
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句