【问题标题】:Iterate through arrays in typescript遍历打字稿中的数组
【发布时间】:2018-12-05 02:15:09
【问题描述】:

我想遍历一个对象数组并在 typescript 中访问该迭代对象的属性值。

在 c# 中执行此操作,只需通过数组执行一次 foreach 即可。

在打字稿中,这似乎有点不同。我们可以做一个 foreach,但我们无权访问“完整”对象,如何做到这一点?

@Input() gridDefinitions: GridColumnDefinition[]   
 public test() {
     for (var def **in** this.gridDefinitions){
       var test = <GridColumnDefinition>this.selectedObject;
       let castedtype = <GridColumnDefinition>def; // this gives an error
    }  
 }

更新:我刚刚遇到了解决方案。问题在于如何遍历集合。当使用 of 而不是 in 时,我们可以访问迭代对象。见TypeScript for-in statement

【问题讨论】:

  • 迭代后想要达到的效果,可以直接使用map and flat
  • 不使用“var”,使用“let”
  • @Eliseo "let" 似乎是另一种声明变量的方式,但我找不到解决先前问题的方法。

标签: arrays angular typescript loops


【解决方案1】:

for...in 构造迭代对象的键。要遍历数组中的项目,您需要使用 for..of

for (var def of this.gridDefinitions){ // def is of the array item type no casting necessary 
    var test = <GridColumnDefinition>this.selectedObject;
} 

如果需要,您还可以使用forEach/map/reduce 等数组方法以类似于LINQ 的方式处理数组。

【讨论】:

    【解决方案2】:

    使用 foreach 并给 def 一个类型

    gridDefinitions.forEach((def: GridColumnDefinition) => {
           var test = <GridColumnDefinition>this.selectedObject;
           let castedtype = <GridColumnDefinition>def;
     })
    

    【讨论】:

    • @Fre 请注意,如果gridDefinitions 的类型为GridColumnDefinition[],则def 上的类型注释是不必要的。 gridDefinitions.forEach( def =&gt; {...}) 也可以使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多