这个问题已经问过了,但不能解决我的问题。
我在Angular 9
应用程序中实现了Chart.js
。没有预期的图表值。
我有一个API响应,我想让lineChartLabels
如下所述stackblitz Demo.
这是我的API响应:
let data = [
{operatorName: 'OSEN+', date: '05-04-2023', totalCount: 1},
{operatorName: 'OSN+', date: '12-04-2023', totalCount: 7},
{operatorName: 'MBC', date: '01-06-2023', totalCount: 1},
{operatorName: 'OSEN+', date: '02-06-2023', totalCount: 1},
{operatorName: 'MBC', date: '09-06-2023', totalCount: 1},
{operatorName: 'MBC', date: '16-06-2023', totalCount: 1},
{operatorName: 'MBC', date: '23-06-2023', totalCount: 15}
];
我想用API响应设置lineChartLabels
。
预期数据集:
this.lineChartData = [
{ data: [1, 7, 0, 1, 0, 0, 0], label: 'OSEN+' },
{ data: [0, 0, 1, 0, 1, 1, 15], label: 'MBC' },
];
this.lineChartLabels = ['05-04-2023', '12-04-2023', '01-06-2023', '02-06-2023', '09-06-2023','16-06-2023', '23-06-2023' ];
这里,如果operatorName
不存在于lineChartLabels
中,则设置为值0
。
代码:
let operators = [...new Set(data.map((x) => x.operatorName))];
let subLabelDatasets = operators.map((x) => {
let datasets = [];
for (let operator of operators) {
datasets.push(
data.find((y) => y.operatorName == operator && y.date == x)?.totalCount || 0
);
}
return {
label: x,
data: datasets,
};
});
console.log(data)
console.log(subLabelDatasets)
预期结果
1条答案
按热度按时间w51jfk4q1#
注意事项
(1)为了让我的回答更有启发性,我更改了这个变量的名称:
operators
至uniqueOperators
x
至uniqueOperator
(2)我将一些
let
更改为const
,因为它从未重新分配(3)更新
代码
你需要把你的逻辑更新成这样:
这将像你期望的那样输出一个数组:
即使API输出的数据在同一日期包含多个运算符,此代码也可以工作,如:
将输出:
你可以用
uniqueDates
来替换硬编码的lineChartLabels
完整代码
(在您的stackblitz演示上测试)
我希望它有帮助!