0

I have a string that I am trying to loop through. It has nested arrays and I want to get the values from each layer. However I seem to be getting an undefined from the second layer onwards.

//String [{"username":"test","usersurname":"test","cellnumber":"test","displayname":"test","profilepicture":"test","projects":[{"projectname":"test","dateadded":"test","notes":"test","image":"test"},{"task":[{"taskname":"test","taskdescription":"test","taskimage":"test"}]}]}]

//My for loop - All variables are declared prior

   for(var i = 0; i < data.length; i++){
    username = data[i].username;
    console.log(username);
    usersurname = data[i].usersurname;
    cellnumber = data[i].cellnumber;
    displayname = data[i].displayname; 
    profilepicture = data[i].profilepicture;
    for(var j = 0; j < data[i].projects.length; j++){
      dateadded = data[i].projects[j].dateadded;
      console.log(dateadded);
      notes = data[i].projects[j].notes;
      image = data[i].projects[j].image;
       for(var k = 0; k < data[i].projects[j].task.length; k++){
         taskname = data[i].projects[j].task[k].taskname;
         console.log(taskname);
         taskdescription = data[i].projects[j].task[k].taskdescription;
         taskimage = data[i].projects[j].task[k].taskimage;
       }          
    }

  }
skydev
  • 1,867
  • 9
  • 37
  • 71
  • 1
    Side note: JSON is a *textual notation* for data exchange. [(More here.)](http://stackoverflow.com/a/2904181/157247) If you're dealing with JavaScript source code, and not dealing with a *string*, you're not dealing with JSON. – T.J. Crowder Jan 17 '18 at 12:04
  • Parse the string using `JSON.parse` and then loop through – Bharadwaj Jan 17 '18 at 12:12
  • 1
    Sample data you have posted doesn't have `task` prop in `projects[i]` – Yury Tarabanko Jan 17 '18 at 12:13
  • 1
    Side note: You could make your code more readable by defining more variables (`user = data[i]; projects = user.projects; project = propects[j]` etc) instead of using `data[i].projects[j].task[k].propName` – Yury Tarabanko Jan 17 '18 at 12:19

1 Answers1

3

Please check undefined end errors in your code. if something is undefined loop will break.

for (var i = 0; i < data.length; i++) {
        username = data[i].username;
        console.log(username);
        usersurname = data[i].usersurname;
        cellnumber = data[i].cellnumber;
        displayname = data[i].displayname;
        profilepicture = data[i].profilepicture;
        if("undefined" != typeof (data[i].projects))
        {
            for (var j = 0; j < data[i].projects.length; j++) {
                dateadded = data[i].projects[j].dateadded;
                console.log(dateadded);
                notes = data[i].projects[j].notes;
                image = data[i].projects[j].image;
                if ("undefined" != typeof (data[i].projects[j].task)) {
                    for (var k = 0; k < data[i].projects[j].task.length; k++) {
                        taskname = data[i].projects[j].task[k].taskname;
                        console.log(taskname);
                        taskdescription = data[i].projects[j].task[k].taskdescription;
                        taskimage = data[i].projects[j].task[k].taskimage;
                    }
                }
            }
        }

    }
Negi Rox
  • 3,828
  • 1
  • 11
  • 18