Ummm...I think you've taken a step backward.
In human interface, at least.
I think it's bad to have that generic prompt for the three pieces of data instead of the three explicit prompts you had the first time.
Yes, using an array of arrays is an improvement. But an array of objects would be even more of one.
And your search is flawed in the same way it was the first time: You make ONE CHECK in the loop for the searched-for number. If you don't find it, you issue that alert showing null values. No. Wrong. Only if you don't find a match after *ALL* the iterations through the loop should you issue a "not found" message.
Finally (for now!) look at this line:
WHERE does the variable trackInfo
HINT: No place.
if(trackData[j] == trackSearch)
Okay, what kind of variable/value is trackSearch
?? And what kind of value is trackData[j]
HINT: They aren't at all the same kinds of thing.