Я получаю данные JSON из API, и мне нужно сопоставить их с отдельными массивами.
Данные принимаются в таком формате:
[
{"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.info(this.salesTrendData);
})
}
console.info should give me: Array1 and Array2
Любая помощь будет принята с благодарностью. Я новичок на этом форуме, пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и заранее спасибо :)





Во-первых, вам понадобится объект для сопоставления значений месяца. Затем вы используете Массив.карта() для достижения желаемых результатов, как показано в демонстрации ниже.
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.info(Array1);
console.info(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};
})
)
}
}
Хорошее и чистое решение, мне нравится!
Большое спасибо за ссылку и прекрасное объяснение, это сработало отлично! Ты жжешь!
Вы не можете вернуть два значения из функции: массив1 и массив2 должны быть заключены в массив ([массив1, массив2]) или объект{массив1: [...], массив2: [...]}, или это должно быть два элемента в потоке с использованием rxjs.