Uncaught TypeError: Cannot set property 'undefined' of undefined

Tell us what’s happening:
Hi! When I reached the test ‘Record collection’ in the JavaScript certification, after several attempts, I passed the test. But when I run it on VS Code to test it on Google Chrome I get the following error: Uncaught TypeError: Cannot set property ‘undefined’ of undefined.
I was googling and reading about one of the top-most JS errors, but i can’t realize why isn’t this working. Thanks!

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"
}
};

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

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

updateRecords(5439, "artist", "ABBA");

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36.

Challenge: Record Collection

Link to the challenge:

What do you do exactly to test the code?

run it on VS Code to test it on Google Chrome

vsc terminal? Chrome console?

1 Like

when you are testing it… are you also coping the object definition, or just the function?

1 Like

I’ve found the mistake. I wrote in VS Code this way:

updateRecords(5439, "artist", "ABBA");
console.log(updateRecords());

So, I tried to put the arguments on the log:

console.log(updateRecords(5439, "artist", "ABBA"));

and it worked!
Later I figured it out how to do it from inside the function. I changed

return collection for console.log(collection)

Anyway I still don’t get it why it didn’t work from the first way. I guess I will learn it sooner. Thanks for help!

Ok, glad you fugured that out :slight_smile:
The first time you tested it, you didn’t pass any arguments to updateRecords(). That’s what the error message was about.
Your function still worked, collection was updated before this console.log, with updateRecords(5439, "artist", "ABBA"); but you couldn’t see it.

console.log() and return aren’t interchangable, although visually it may seem the same. and you can use both in your function if you want.

Good luck :wink:

2 Likes