2017-05-25 82 views
0
public Update() { 

     this.Data = this.Items; 
     console.log(this.Data); 
     for (let value of this.Data) { 
      console.log(value); 
     } 
    } 

控制台打字稿:打字稿循环显示最后一个对象后未定义

[Object, Object, Object] 

Object 
CandidateName:"B" 
ControlId:0 
CreatedBy:null 
CreationDateTime:null 
ExamId1:2000 
ExamName:" Safety" 
Id:1292353 

它显示长度:3

当我在这个对象要循环,它是抛出错误长度是不确定的,请帮我。

+0

你想干什么? –

+0

你想迭代数组中的对象还是单个对象? –

+0

@Mr_Perfect迭代该数组中的每个对象 – Pramod

回答

1

for infor of声明应避免用于遍历数组。它有两个“缺点”:

1)的次序并不保证

2)也继承的属性将被列出/枚举,如果枚举:定义所述属性时假没有被指定。

如果例如你添加一个属性到你的原型,这个循环也会遍历那个。

Array.prototype.test = "test"; 
var a = ['a', 'b']; 
for (let i in a) { 
    console.log(a[i]); 
} 
for (let i of a) { 
    console.log(i); 
} 

你应该看到你的财产打印。

如果你改变你的循环到连续的循环:

for (let i = 0; i < this.Data.length; i++ value of this.Data) { 
    console.log(this.Data[i]); 
} 

或:

this.Data.forEach((el) => { 
    console.log(el); 
}); 

你可能看不到您的问题。

0

如果我理解正确,this.Items可能在某些情况下未定义,并且您无法迭代。

所以:

for (let value of (this.Data || [])) { 

这可以防止坏的价值观

+0

this.Items包含该对象的数组和长度,length是对象的总数。 – Pramod

+0

this.Data = this.Items in your case,so same thing –

+0

yes same thing .. – Pramod

0

如果要遍历对象,则必须使用Object.keys(your_obj)。因为对象没有长度属性。您只能使用for of来遍历'Array''String'类型。您可以使用Object.keys(your_obj).length为连续for循环for(var i=0; i<Object.keys(your_obj).length; i++)

public Update() { 

     this.Data = this.Items; 
     console.log(this.Data); 
     for (let obj of this.Data) { 
      console.log(obj); 
      //iterate over object here 
      for(let property of Object.keys(obj)){ 
       // write your logic for specific object 
      } 
     } 
    } 

扩展到quirimmo的回答,连续for循环,使用此

 this.Data.forEach(function(obj){ 
     console.log(obj); 
     //iterate over object here 
     for(var i=0; i<Object.keys(obj).length; i++){ 
      // write your logic for specific object 
     } 
    }) 
+0

但我越来越无法读取属性forEach是未定义的。 – Pramod

+0

这意味着'this.Data'是未定义的。所以,问题在别的地方。什么是“this.Items”? –