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

我有一个查询后端API的服务。该API返回一组逗号分隔的文本行。这些列对应于我创建的TypeScript类中的属性。类是:将数组映射到Typescript/Angular中的对象

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的一些功能,可以让我映射每一行来直接创建一个对象数组?

回答:

如果我正确理解你的代码,这样的事情应该是非常接近你以后(和很多更容易阅读,IMO)

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')

);

}

理想情况下,我会探讨如何说服务更新为不返回怪诞的逗号分隔的字符串。

回答:

你可以通过移动测绘工作进入人体简化您的构造函数签名一点点,就像这样:

class TopTalker { 

public source: string;

public protocol: number;

public packets: number;

public _percent: string;

public _tally: string;

constructor(sourceRow: string[]) {

this.source = sourceRow[0];

this.protocol = parseInt(sourceRow[1]);

this.packets = parseInt(sourceRow[2]);

this._percent = sourceRow[3];

this._tally = sourceRow[4];

}

}

这将删除一些从实体化代码的复杂性:

for (let row of results) { 

let thisTalker = row.split(/,/);

let a = new TopTalker(thisTalker);

this.topTalkers.push(a);

}

以上是 将数组映射到Typescript/Angular中的对象 的全部内容, 来源链接: utcz.com/qa/267225.html

回到顶部