[英]Filter Observable by property of array of objects
我需要过滤一个 Observable 并仅“通过”stream,它在对象数组中具有特定的属性值,即在此 stream 内部。
让我们举个例子。 这是可观察的。
const observable = of({name: 'agency', year: '2010', job: [
{name: 'plumber', city: 'Los Angeles'},
{name: 'driver', city: 'Dallas'}
]});
observable.subscribe(response => console.log(response));
仅当作业数组中有“名称:管道工”时,我才需要在 subscribe 方法中 console.log 一个响应(响应必须是整个流)。
所以我要做的是:
observable.pipe(
filter(obs => obs.job.filter(item => item.name === 'plumber')))
.subscribe(response => console.log(response));
或者
observable.pipe(
map(obs => obs.job),
filter(item => item.name === 'plumber'))
.subscribe(response => console.log(response));
不幸的是,上面的代码没有按预期工作。
我想收到整个 stream 只有在作业数组中有一个键值=名称:'管道工'。
如果满足此条件,我想获取 console.log: {name: 'agency', year: '2010', job: Array(2)},否则控制台中不应出现任何内容。
你可以帮帮我吗?
我认为这可以完成这项工作:
const observable = of({name: 'agency', year: '2010', job: [
{name: 'plumber', city: 'Los Angeles'},
{name: 'driver', city: 'Dallas'}
]})
.pipe(filter(obj => obj.job.some(({ name }) => name === 'plumber')))
observable.subscribe(response => console.log(response));
对于每个发出的值,您验证jobs
属性是否包含满足相关条件的元素。 这可以通过使用Array.prototype.some()来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.