pvitt
pvitt

Reputation: 1065

Cannot set property 0 of undefined typescript

I'm getting subject error in my angular app when looping through json data and trying to assign that data to an array of a data type class. my code is:

.. 
import {UnMarkedData} from './mt-UnMarkedData';
...
this.httpClient.get(GlobalConstants.DigAlertServiceURL + "TicketUnMarkedGet" )
.subscribe((data: any) => { 
 //let ticket: string = data.UnMarked[0].Ticket;//this assignment works
 var ticketData: UnMarkedData[];
 for (let i=0;i<data.UnMarked.length; i++){
    ticketData[i].ID =  data.UnMarked[i].ID;//can't set property of undefined occurs here
    ticketData[i].Ticket = data.UnMarked[i].Ticket;
    ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
 }

The UnMarkedData class is:

export class UnMarkedData {
    public ID: number; 
    public Ticket: string; 
    public DateRcvd: string;
constructor() { 

}

}

ideas of where I'm going wrong here?

Thanks

Pete

I thought one of these would work, but still getting same error:

var ticketDatas:UnMarkedData [] = [];
 //var ticketData: [{ID:number, Ticket:string, DateRcvd:string}];//gives error
 for (let i=0;i<data.UnMarked.length; i++){
   //let ticketData:UnMarkedData = new UnMarkedData();//get error
   let ticketData:UnMarkedData = {ID:undefined, Ticket:undefined, DateRcvd:undefined};//get error
    ticketData[i].ID =  data.UnMarked[i].ID;
    ticketData[i].Ticket = data.UnMarked[i].Ticket;
    ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
    ticketDatas.push(ticketData);
 }

Upvotes: 0

Views: 461

Answers (2)

pvitt
pvitt

Reputation: 1065

this worked, just needed to look at it more closely: Thanks Randy and El-Mo, your ideas were right

  var ticketDatas:UnMarkedData [] = [];

 for (let i=0;i<data.UnMarked.length; i++){
   let ticketData:UnMarkedData = new UnMarkedData();
    ticketData.ID =  data.UnMarked[i].ID;//was mistakenly assigning ticketData[i].ID
    ticketData.Ticket = data.UnMarked[i].Ticket;
    ticketData.DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
    ticketDatas.push(ticketData);
 }

Upvotes: 0

El-Mo
El-Mo

Reputation: 380

As Randy pointed in a comment, you have not initialised the array. So that means at runtime, you're attempting to access an index of undefined;

var ticketData: UnMarkedData[] = []; // <-- Initialise the array as an empty list
for (let i=0;i<data.UnMarked.length; i++){
    ticketData[i].ID =  data.UnMarked[i].ID;
    ticketData[i].Ticket = data.UnMarked[i].Ticket;
    ticketData[i].DateRcvd = this.FormatDate(data.UnMarked[i].DateRcvd);
}

Upvotes: 2

Related Questions