【问题标题】:Get value from array of objects as RxJS observable从对象数组中获取值作为 RxJS observable
【发布时间】:2022-01-01 20:00:42
【问题描述】:

我有一个 myData$ 对象数组,这是一个 BevahiorSubject(来自 RxJS 库)。 myData$ 看起来像这样:

[
  {
    type: 'car',
    year: 12,
  },
  {
    type: 'boat',
    year: 9,
  },
]

我想将包含type-key 处的字符串值'car' 的对象的year-key 中的值分配给我的另一个Observable desiredYear$,但它应该直接获取该值无需存储在数组中。所以desiredYear$ 应该等于12,而不是[12]

第一步,我尝试通过过滤'car'-string 来获取正确的对象:

this.desiredYear$ = this.myData$.pipe(
  map(
    myData => myData.filter(data => data.type === 'car'),
  ),
);

它返回所需值的对象但还不是year-key的所需值,结果(见下文)存储在一个数组中(我不想要):

[
    {
        type: 'car',
        year: 12,
    },
]

有什么办法可以直接返回12

【问题讨论】:

    标签: javascript arrays angular rxjs


    【解决方案1】:

    我想说更合适的是使用Array#find 而不是Array#filter 并直接访问year 属性

    this.desiredYear$ = this.myData$.pipe(
      map(
        myData => myData.find(data => data.type === 'car')?.year,
      ),
    );
    

    如果Array#find 返回undefinedoptional chaining ?. 运算符将减少错误。如果数组中没有满足条件data.type === 'car'的元素会怎样。

    请注意,在这种情况下,desiredYear$ observable 将发出 undefined。如果您希望忽略 undefined 排放,可以通过管道输入 filter 运算符

    this.desiredYear$ = this.myData$.pipe(
      map(
        myData => myData.find(data => data.type === 'car')?.year,
      ),
      filter(year => !!year)
    );
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2018-10-12
      • 2016-10-03
      • 1970-01-01
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      相关资源
      最近更新 更多