我需要过滤一个Observable,并且仅“通过”该对象,该对象在对象流中具有特定属性值,该对象位于该流内部。
让我们举个例子。这是可以观察的。
const observable = of({name: 'agency', year: '2010', job: [
{name: 'plumber', city: 'Los Angeles'},
{name: 'driver', city: 'Dallas'}
]});
observable.subscribe(response => console.log(response));
仅当作业数组中有'name:plumber'时,我才需要用subscription方法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));
不幸的是,以上代码段无法按预期工作。
仅当作业数组中有一个键值=名称:“管道工”时,我才想接收整个流。
如果满足此条件,我想获取console.log:{name:'agency',year:'2010',job:Array(2)},否则控制台中将不会出现任何内容。
你能帮我吗?
答案 0 :(得分:3)
我认为这可以完成工作:
chain.doFilter
对于每个发出的值,请验证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));
属性是否包含满足所讨论条件的元素。这可以通过使用Array.prototype.some()来实现。