返回特定对象的属性值RXJS .map和.filter

时间:2019-11-15 18:57:48

标签: javascript arrays object rxjs

我有一个对象数组,每个对象具有相同的2个参数:contentIddata

[
    {
      contentId: 12343,
      data: 'a bunch of data'
    },
    ...
]

我的RXJS observable使用以下代码很好地返回对象。

this.$bcc = this.bccService.getBcc().pipe(
  map(data => data.find(obj => obj.contentId == 12343)), // returns the matching object
  // map(data => data.find(obj => obj.contentId == 12343)['data']), // undefined
);

但是,如何最好地指定匹配对象的data参数值?

1 个答案:

答案 0 :(得分:0)

. syntaxkey syntax都可以,因此您可以使用:

data.find(item => item.contentId === 12343).data;
data.find(item => item.contentId === 12343)['data'];

我猜不相关,但不清楚为什么管道中存在map

const data = [
    {
      contentId: 12343,
      data: 'a bunch of data'
    },
     {
      contentId: 45678,
      data: 'a bunch of data'
    },
]

console.log(data.find(item => item.contentId === 12343).data);
console.log(data.find(item => item.contentId === 12343)['data']);

更新

再次查看问题之后,语法就不成问题了。我看到的是您正在第一个覆盖数据值的映射中设置data属性。请尝试如下:

this.$bcc = this.bccService.getBcc().pipe(
  map(data => data.find(obj => obj.contentId == 12343)), // returns the matching object
  map(data => data.propertyInData), // at this point data is {contentId:12343,data: 'a bunch of data'
    },
);