【问题标题】:Transformation of ObservableObservable 的转换
【发布时间】:2020-04-02 19:24:18
【问题描述】:

我有一个如下所示的数据结构:

 Observable<Array<LineChart>>

LineChart 的定义如下

export interface LineChart  {
  name?: null | string;
  series?: null | Array<DateLineChartEntry>;
}

一个 DateLineChartEntry 是这样定义的:

export interface DateLineChartEntry  {
  name?: string;
  value?: number;
}

其中name是字符串,包含日期。

对于我对这个 DataStructure 的后续操作,我需要将 DateLineChartEntry 转换为 sth。像这样:

export interface DateLineChartEntryConverted  {
  name?: Date;
  value?: number;
}

这意味着,我必须像这样映射所有 DateLineChartEntries

DateLineChartEntry  => {
name: new Date(name),
value: value
}

我目前的解决方案是这样的:

    this.data = getObservable({ body: parameters }).pipe(
  map(lca => {
    var lcaConverted = [];

    for (var lc of lca) {
      var name = lc.name
      var lcN = {
        name: name,
        series: []
      };

      for (var e of lc.series) {
        var n = new Date(e.name);
        lcN.series.push({
          name: n,
          value: e.value
        });
      }

      lcaConverted.push(lcN);
    }

    return lcaConverted;
  })
);

这很丑陋,我正在寻找一个“更好”的解决方案。

有没有一种简单的方法可以通过使用初始 Observable(并接收 Observable 作为输出)来做到这一点?

提前感谢您的帮助。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这基本上是我的问题 - 从来没有真正基于“接收某些东西并将其放在某处”的基础上使用可观察(或转换) - 所以我已经在“从哪里开始”失败了。首先方法是使用“管道”,然后在所有数据上使用一些 foreachs 重新创建对象。但似乎根本没有成功。最大的问题:我不知道如何调试我的中间结果。
  • 对不起,你的目标我不清楚..你能用你到目前为止尝试的代码更新吗?
  • 添加了我当前的(工作)解决方案,这不是很“好”:-)

标签: javascript arrays typescript observable reactive


【解决方案1】:

您只是在寻找更清洁的东西吗?如果是这样,请查看一些较新的数组功能,而不是编写 for

this.data = getObservable({
        body: parameters
    }).pipe(
        map(lca => lca.map(entry => ({
                    name: entry.name,
                    series: entry.series.map(x => ({
                        name: new Date(x.name),
                        value: x.value
                    }))
                }))
            )
        );

具体.map:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

【讨论】:

  • 是的,这正是我想要的(特别是数组的地图)-非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-03-24
  • 2021-05-24
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2018-10-23
  • 2019-04-03
  • 2023-03-23
相关资源
最近更新 更多