Concepts in Record Collection challenge still not clear to me

Tell us what’s happening:
I decided to do this record collection challenge again and very discouragingly still failed to pass it.

Your code so far


// 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(prop !== "tracks" && value !== "") {
   collection[id][prop] = value;
 } else if (prop === "tracks" && collection[id].hasOwnProperty !== "tracks") {
   collection[id][prop].tracks = [];
 }    if (prop === "tracks" && value !== "") {
   collection[id]["tracks"].push(value);
   
   
 }      else if (value === "") {
        delete collection[id][prop];
 }
  
  return collection;
};

// Alter values below to test your code
updateRecords(5439, "artist", "ABBA");

The problem is that I am still failing the 2nd exercise: "After UpdateRecords (5439, “tracks”, “Take a Chance on Me”), tracks should have “Take a Chance on Me” as the last element.
I am also getting the cryptic error message:

// running tests

Cannot set property 'tracks' of undefined
// tests completed

Could someone please look at my code as I have checked and rechecked it and cannot figure out why this error message is popping up nor do I know how can I correct it?
, "Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/record-collection/

You are close, though there are 2 things I would recommend. 1 think about your logic and nesting your “if” statements. And for this challenge. Focus on doing 1 thing at a time, step-by-step, then putting them all together. You’ll get it!

so, first, this line:

that’s not actually how you’d use hasownProperty(). See, collection[id] references an object, and objects inherit some functionality - some properties and methods from the Object class. Object.hasOwnProperty() is a function. Above, you’re saying ‘if my object has a property named hasOwnProperty, and if that is equal to ANYTHING but the string “tracks”…’

Which is not, in fact, what you want to say here. Instead, suppose I wanted to check if collection[id] (which is the current record object) has a property named awards - I could do so by if(collection[id].hasOwnProperty('awards') ){...} - this says “if my object checks to see if it has a property IN ITSELF named ‘awards’, and it sees that it DOES… do this”.

Now the second thing is in this line:

But prop is “tracks”, so you’re saying to the collection[id] object, which the current if statement has determined doesn’t have a “tracks” property, to add a “tracks” property inside the “tracks” property it doesn’t have.

See, let’s break it down: collection[id][prop], in this instance, would point to collection[id].tracks, which is where you want to add the empty array. Instead, though, you’re doing collection[id][prop].tracks, which would be the same ascollection[id].tracks.tracks, and is causing you all sorts of problems.

Thank you so very much. You really broke it down to the basics and `I now have a better understanding of the basic concept that is being tested here. My code just passed and I’m delighted. thanks again1

Many thanks for your support. My code has just passed the test and I am grateful for your help.