2017-05-25 118 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」? –