按对象数组的属性观察

时间:2019-09-19 20:20:32

标签: javascript angular rxjs

我需要过滤一个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)},否则控制台中将不会出现任何内容。

你能帮我吗?

1 个答案:

答案 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()来实现。