Ashwin Gupta Ashwin Gupta - 2 months ago 7
Javascript Question

Why are my defined strings printing to the console as undefined?

I've written a very simple application that pulls all the tracks off of a spotify playlist. First, it gets the track JSON objects using an AJAX request and puts them in an array called

tracks[]
.

Next, I iterate through this array, and in each iteration I pull out the strings for the name of the song and the artist for each track. I put these in a concentrated string. This string is then stored in a new array called
complete
. This is done for each track.

Essentially,
complete
is an array that looks something like

[
"Sympathy for The Devil, The Rolling Stones",
"Come Together, The Beatles",
...
]


At this point I have a strange issue. According to chrome's debugger, the array
complete
has all of the correct values inside of it. However, when I attempt to
console.log
any element of
complete
I end up with the value 'undefined'. Stranger yet, if I
console.log
the expression I use to get the two strings and stitch them it prints the correct value.

Why does this happen and how can I fix it so it can
console.log
the correct values

Here is the code that iterates through stored JSON objects, stores them in new array, and prints:

function print() {
for(var x = 0; x < 4; x++) {
for(var n = 0; n < 100; n++) {
try {
//this logs correct
console.log(tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);

//these have correct value
var deb = (tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);
complete[z] = deb;
z++;

console.log(deb); //throws no error, prints fine
console.log(complete[z]); //prints undefined

} catch(err) {
//no exception ever thrown
}
}
}
}


I don't do too much JS, sorry if I'm missing something obvious.

Answer

Right after assigning complete[z], you are incrementing z. When printing, you are not accessing complete[z] anymore, but complete[z+1] which is not yet defined. Try moving the incrementation after the console.log command.