【问题标题】:Map Observable from JSON to array将 Observable 从 JSON 映射到数组
【发布时间】:2019-09-18 20:59:28
【问题描述】:

我从 api 接收 JSON 数据,我需要将其映射到单独的数组。

正在以这种格式接收数据:

[
  {"MONTH":9,"YEAR":2015,"SUMAMT":0},
  {"MONTH":10,"YEAR":2015,"SUMAMT":11446.5},
  {"MONTH":11,"YEAR":2015,"SUMAMT":539252}
]

我需要把它转换成

Array1 = [Sep-2015,Oct-2015,Nov-2015]
Array2 = [0,11446.5,539252]

这是我正在尝试的代码,但我不确定如何实现它。

这是接收数据的服务:


    getSalesTrend(): Observable < any > {
      return this.http.get<any>(`${this.apiPath}/salesTrend`)
        .pipe(
          map(data => {
            this.date = new Date(data.YEAR, data.MONTH, 1);
            return this.date.formatDate(this.date, "MMM-YYYY");
          })
        )
    }

这是订阅数据的组件:

salesTrendData: any[]
ngOnInit() {
    this.adminService.getSalesTrend()
      .subscribe(salesTrendData => {
        this.salesTrendData = salesTrendData
        console.log(this.salesTrendData);
      })
  }

console.log 应该给我:Array1 和 Array2

任何帮助将不胜感激。我是这个论坛的新手,如果您需要更多信息,请告诉我,并提前致谢:)

【问题讨论】:

  • 你不可能从一个函数返回两个值:array1 和 array2 必须被包装在一个数组 ([array1, array2]) 或一个对象{array1: [...], array2: [...]},或者它必须是使用 rxjs 的流中的两个项目。

标签: angular typescript


【解决方案1】:

首先,您需要一个对象来映射月份值。然后,您使用Array.map() 来达到预期的效果,如下面的演示所示。

const months = {
   '1': 'Jan',
    '2':'Feb',
    '3':'Mar',
    '4':'Apr',
    '5':'May',
    '6':'Jun',
    '7':'Jul',
    '8':'Aug',
    '9':'Sep',
    '10':'Oct',
    '11':'Nov',
    '13':'Dec'
}

const data = [{"MONTH":9,"YEAR":2015,"SUMAMT":0}, {"MONTH":10,"YEAR":2015,"SUMAMT":11446.5},{"MONTH":11,"YEAR":2015,"SUMAMT":539252}];

const Array1 = data.map(obj => {
  const month = months[obj.MONTH]
  return `${month}-${obj.YEAR}`;
})

const Array2 = data.map(obj => obj.SUMAMT)
console.log(Array1);
console.log(Array2);

以下是我们如何将其集成到您的代码中。映射完成后,我们还是把它们都存到一个对象中,然后把对象返回给你的组件。

getSalesTrend(): Observable<any> {
  return this.http.get<any>(`${this.apiPath}/salesTrend`)
    .pipe(
      map(data => {
        const months = {'1': 'Jan', '2':'Feb', '3':'Mar', '4':'Apr', '5':'May', '6':'Jun', '7':'Jul', '8':'Aug', '9':'Sep', '10':'Oct', '11':'Nov', '13':'Dec'};
        const Array1 = data.map(obj => {
          const month = months[obj.MONTH]
          return `${month}-${obj.YEAR}`;
        });
        const Array2 = data.map(obj => obj.SUMAMT);
        return {Array1, Array2};
      })
    )
  }
}

【讨论】:

  • 漂亮干净的解决方案,我喜欢!
  • 非常感谢您的链接和精彩的解释,它工作得很好!你摇滚!
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 2017-09-23
  • 2018-09-22
  • 2015-03-17
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多