繁体   English   中英

按对象数组的属性过滤 Observable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM