Typescript .push 函数将空对象添加到我的数组
Typescript .push function adds empty object to my array
当我将数组推送到 ngx-barchart 时,推送函数向图表添加了一个空对象。我遍历 api 服务并得到这个:
然后我在barchart.component.ts
调用服务
single: any = [
{
"name": [],
"value": []
}
];
要推送的函数:
getChartData() {
this.storageService.barChart.subscribe(barChart=> {if(barChart)
barChart.forEach((i) => {
// this.single[0].push({name: (i.skill_name), value: (i.score)})
this.single.push({name: (i.skill_name), value: (i.score)});
});
this.single=[...this.single];
console.log(this.single)
});
};
我希望不会将空对象传递到我的图表数据。
我试过添加:
this.single[0].push({name: (i.skill_name), value: (i.score)})
但我收到错误类型错误:_this.single[0].push 不是函数
I'm expecting the to not have an empty object passed to my chart data.
那就不要一开始就创建一个,那是你数据中的空白。
而不是:
single: any = [
{
"name": [],
"value": []
}
];
只是:
single: any = [];
旁注 1:除非您想继续向 this.single.
添加越来越多的数据,否则我根本不会在这里使用 push
如果您的意思是 replace this.single
每次,我都会使用 map
:
this.single = (barChart || []).map(({skill: {score: value, name}}) => ({name, value}));
// (And no `this.single = [...this.single];` afterward, it's not needed)
旁注 2:由于这是 TypeScript,您可能会受益于此数据的类型:
interface ChartDataEntry {
name: string;
value: number; // If it's a number
}
然后
single: ChartDataEntry[] = [];
this.single = ...
行没有改变,TypeScript 可以推断 map
返回的条目类型,并且可以看到它们对该接口有效。
或者,如果您愿意,您可以不声明接口,而只声明内联的条目类型 single
:
let single: {name: string, value: number}[] = [];
但是声明类型通常很有用,因为您可能会发现您希望在同一代码的其他地方使用它。
this.single[0]
是对象不是数组
你可以试试:
this.single[0].name = i.skill_name;
this.single[0].value= i.score;
当我将数组推送到 ngx-barchart 时,推送函数向图表添加了一个空对象。我遍历 api 服务并得到这个:
然后我在barchart.component.ts
调用服务 single: any = [
{
"name": [],
"value": []
}
];
要推送的函数:
getChartData() {
this.storageService.barChart.subscribe(barChart=> {if(barChart)
barChart.forEach((i) => {
// this.single[0].push({name: (i.skill_name), value: (i.score)})
this.single.push({name: (i.skill_name), value: (i.score)});
});
this.single=[...this.single];
console.log(this.single)
});
};
我希望不会将空对象传递到我的图表数据。
我试过添加:
this.single[0].push({name: (i.skill_name), value: (i.score)})
但我收到错误类型错误:_this.single[0].push 不是函数
I'm expecting the to not have an empty object passed to my chart data.
那就不要一开始就创建一个,那是你数据中的空白。
而不是:
single: any = [
{
"name": [],
"value": []
}
];
只是:
single: any = [];
旁注 1:除非您想继续向 this.single.
添加越来越多的数据,否则我根本不会在这里使用 push
如果您的意思是 replace this.single
每次,我都会使用 map
:
this.single = (barChart || []).map(({skill: {score: value, name}}) => ({name, value}));
// (And no `this.single = [...this.single];` afterward, it's not needed)
旁注 2:由于这是 TypeScript,您可能会受益于此数据的类型:
interface ChartDataEntry {
name: string;
value: number; // If it's a number
}
然后
single: ChartDataEntry[] = [];
this.single = ...
行没有改变,TypeScript 可以推断 map
返回的条目类型,并且可以看到它们对该接口有效。
或者,如果您愿意,您可以不声明接口,而只声明内联的条目类型 single
:
let single: {name: string, value: number}[] = [];
但是声明类型通常很有用,因为您可能会发现您希望在同一代码的其他地方使用它。
this.single[0]
是对象不是数组
你可以试试:
this.single[0].name = i.skill_name;
this.single[0].value= i.score;