Cannot read property 'push' of undefined

Cannot read property 'push' of undefined
0

#1

Hello,

I am trying to solve Basic Javascript: Record Collection and came across this strange problem, I keep getting Cannot read property ‘push’ of undefined. I’ve annotated the area with a single line comment. I’d appreciate some out of the zone/box insights as I cannot figure this one out. Also, refactors suggestions are highly appreciated. This is my code snippet:

// Setup
var collection = {
    "2548": {
      "album": "Slippery When Wet",
      "artist": "Bon Jovi",
      "tracks": [ 
        "Let It Rock", 
        "You Give Love a Bad Name" 
      ]
    },
    "2468": {
      "album": "1999",
      "artist": "Prince",
      "tracks": [ 
        "1999", 
        "Little Red Corvette" 
      ]
    },
    "1245": {
      "artist": "Robert Palmer",
      "tracks": [ ]
    },
    "5439": {
      "album": "ABBA Gold"
    }
};
// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));

// Only change code below this line
function updateRecords(id, prop, value) {

  if (value == "") {
    delete collection[id][prop];
  }

  if (prop !== "tracks" && value !== "") {
    collection[id][prop] = value;
  }

  if (prop == "tracks") {
    if (!collection[id].hasOwnProperty("tracks")) {
      let tracks = [];
      tracks.push(value);
      collection[id] = tracks;
    }

    if (value !== "") {
      collection[id][prop].push(value);
    } // this is where it triggers, but the thing is, I should be able to call the method.
  }

  return collection;
}

// Alter values below to test your code
updateRecords(5439, "tracks", "Take a chance on me");

Screenshot of what I see:


#2

You have two issues.

The first is with the following line:

collection[id] = tracks;

Remember that collection[id] is an object, but the above line replaces the object with array.

The second issue with your code is the if statement which follows the above code.

if (value !== "") {
  collection[id][prop].push(value);
}

If you do figure out how to correctly assign a tracks property before this line and you pushed value to it, then this next line will end up pushing a duplicate of the value to the array in the tracks property.

P.S - In the future, please include the url to the challenge to allow others to quickly get to the challenge details without having to search for it. Better yet, next time, click the Ask for Help button located on the challenge which will automatically add your code, the challenge url and some other useful information for those helping.


#3

Thanks for the prompt reply Randell. I forgot to add the [props] within that line. I didn’t know about ask for help working like that, so that’s good to know too.