You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何将HTTP请求返回的数组复制到新数组用于ng2-charts

解决Angular中从API响应复制数组到ng2-charts的问题

嘿,别担心,这事儿其实挺简单的!我们只需要正确定位API返回的数据结构,再用合适的方式复制数组就行。

先理清楚数据结构

你从AWS拿到的JSON是这样的:

{ "System1": [ { "name": "MF3", "descr": "Multifilo MF3", "speed": [1,2,3,4], "time": ["10.01", "10.02", "10.03", "10.04"] } ] }

这里的核心是:System1是一个数组,里面的第一个元素就是包含speed和time的目标对象。

修改你的getdata()方法

在subscribe的回调里,我们可以这样操作来完成数组复制:

public lineChartSpeed: Array<number> = [];
lineChartTime: Array<any> = [];
result: Array<ImpiantoModel>;

getdata() {
  this.http.get(this.myUrl)
    .subscribe( data => {
      this.result = data;
      
      // 先做个安全检查,避免System1为空或者不存在时报错
      if (data.System1 && data.System1.length > 0) {
        const targetSystem = data.System1[0];
        
        // 复制speed数组到lineChartSpeed
        // 用扩展运算符做浅拷贝,适合数字/字符串这类基本类型数组
        this.lineChartSpeed = [...targetSystem.speed];
        
        // 复制time数组到lineChartTime
        this.lineChartTime = [...targetSystem.time];
        
        // 你也可以用这两种方式复制,效果完全一样:
        // this.lineChartSpeed = targetSystem.speed.slice();
        // this.lineChartTime = Array.from(targetSystem.time);
      } else {
        // 如果没有数据,清空图表数组,避免图表显示异常
        this.lineChartSpeed = [];
        this.lineChartTime = [];
      }
    });
}

给你个类型定义的小建议

你当前用的http.get<SystemModel[]>(this.myUrl)泛型可能不太准确,因为API返回的是一个包含System1属性的对象,而不是SystemModel数组。建议调整类型定义,让TypeScript帮你做更严谨的类型检查:

// 定义单个系统的详情类型
interface SystemDetail {
  name: string;
  descr: string;
  speed: number[];
  time: string[];
}

// 定义API返回的整体响应类型
interface SystemResponse {
  System1: SystemDetail[];
}

然后把请求改成:

this.http.get<SystemResponse>(this.myUrl)

为啥要用这些复制方法?

直接赋值(比如this.lineChartSpeed = targetSystem.speed)会让两个变量指向同一个数组引用,后续修改其中一个时另一个也会跟着变。而扩展运算符、slice()、Array.from()都是浅拷贝的方式,能让你得到一个独立的新数组,完全不用担心引用关联的问题,对于存储基本类型的数组来说非常合适。

内容的提问来源于stack exchange,提问作者Nicolò Scapin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:40:31