我正在从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
任何帮助将不胜感激。我对这个论坛还很陌生,如果您需要更多信息,请提前告诉我:)
答案 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};
})
)
}
}