Typescript .push函数将空对象添加到我的数组中

时间:2019-06-02 15:39:35

标签: typescript push ngx-charts

当我将数组推入ngx-barchart时,推函数会向图表添加一个空对象。我遍历api服务并获取了此信息:

enter image description here

然后我在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)
    });      
  };

我希望不会将空对象传递给我的图表数据。 empty object

我尝试添加:

this.single[0].push({name: (i.skill_name), value: (i.score)})

但是我收到错误TypeError:_this.single [0] .push不是函数

2 个答案:

答案 0 :(得分:0)

  

我希望不会将空对象传递给我的图表数据。

那么一开始就不要创建一个,那是您数据中的空白。

代替:

single: any = [
  {
    "name": [],
    "value": []
  }      
];

正义:

single: any = [];

旁注1:除非您想继续向push添加越来越多的数据,否则我将不会在这里使用this.single.,如果您要替换 {{ 1}}每次使用this.single

map

侧面注2:由于这是TypeScript,因此您可能会受益于此数据的类型:

this.single = (barChart || []).map(({skill: {score: value, name}}) => ({name, value}));
// (And no `this.single = [...this.single];` afterward, it's not needed)

然后

interface ChartDataEntry {
    name: string;
    value: number; // If it's a number
}

single: ChartDataEntry[] = []; 行没有改变,TypeScript可以推断this.single = ...返回的条目的类型,并可以看到它们对该接口有效。

或者,如果愿意,也可以只声明map内联的条目类型,而不用声明接口:

single

但是具有声明的类型通常很有用,因为您可能会发现要在同一代码的其他地方使用它。

答案 1 :(得分:0)

<!-- Nothing Here --> 是对象而不是数组

您可以尝试:

this.single[0]