将Observable从JSON映射到数组

时间:2019-04-30 08:32:17

标签: angular typescript

我正在从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

任何帮助将不胜感激。我对这个论坛还很陌生,如果您需要更多信息,请提前告诉我:)

1 个答案:

答案 0 :(得分: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};
      })
    )
  }
}