javascript - 将数组映射到 Typescript/Angular 中的对象

标签 javascript angularjs typescript

我有一个正在查询后端 API 的服务。 API 返回一组逗号分隔的文本行。这些列对应于我创建的 TypeScript 类中的属性。类(class)是:

export class TopTalker {
    constructor(
        public source: string,
        public protocol: number,
        public packets: number,
        public _percent: string,
        public _tally: string
    ) {}
}

我目前正在用这些构建对象,如下所示:

  getTopTalkers() {
    this._silk.topTalkers().subscribe(
        data => {
        let results = <any>[];
        results = data;
        this.topTalkers = <any>[];
        for (let row of results) {
          let thisTalker = row.split(/,/);
          let a = new TopTalker(
            thisTalker[0],
            thisTalker[1],
            thisTalker[2],
            thisTalker[3],
            thisTalker[4]);
          if(thisTalker.length > 1){   // Was getting a blank line
            this.topTalkers.push(a);
          }
        }
      console.log(this.largestTransfers);
      },
        err => console.error(err),
        () => console.log('Processed talkers')
        );
  }

以下是 API 返回的数据示例:

["8.248.215.242,6,7037358,53.111350,53.111350","8.248.209.245,6,2459465,18.561725,71.673076","192.168.2.86,6,604136,4.559450,76.232525","192.168.2.43,6,295422,2.229567,78.462092","192.168.2.39,6,254746,1.922583,80.384675","8.248.211.241,6,182544,1.377670,81.762345","192.168.2.69,6,180162,1.359693,83.122038","8.250.125.246,6,152862,1.153658,84.275697","8.248.213.243,6,93544,0.705982,84.981679","167.206.10.209,6,69862,0.527253,85.508931",""]

这可行,但感觉很不对劲。我是否缺少 Angular 或 TypeScript 的某些功能,可以让我映射每一行以直接创建对象数组?

最佳答案

如果我正确理解你的代码,像这样的东西应该非常接近你所追求的(并且更容易阅读,我认为)

getTopTalkers() {
  this._silk.topTalkers().subscribe(
    results => {
      this.topTalkers = results.map((row, index, rows) => {
        let thisTalker = row.split(/,/);

        // Avoid blank lines by checking length
        if (thisTalker.length > 1) {
          new TopTalker(
            thisTalker[0],
            thisTalker[1],
            thisTalker[2],
            thisTalker[3],
            thisTalker[4]
          );
        }
      })
    },
    err => console.error(err),
    () => console.log('Processed talkers')
  );
}

理想情况下,我会尝试更新该服务以不返回怪异的逗号分隔字符串。

关于javascript - 将数组映射到 Typescript/Angular 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997830/

相关文章:

javascript - 我应该在渲染到 HTML5 Canvas 之前剔除元素还是让 Canvas 剔除

javascript - 单击一次按钮即可触发按钮

javascript - 当多个触摸靠得太近时,iOS 触摸会卡住吗?

javascript - 在首页加载时加载服务

javascript - AngularJS + NodeJS 路由 - 不起作用

javascript - Apollo 不可分配给 'VueClass<Vue> 类型的参数

javascript - 在 Puppeteer 中进行 Web Scraping 时如何处理验证码?

angularjs - 解决返回 $firebaseArray 时需要先返回 $firebaseObject 服务?

html - 如何借助 angularjs2 中的鼠标悬停选项将鼠标悬停在按钮上来闪烁图像?

node.js - 如何在一个文件中导入所有类并从那里使用它们 typescript