Record Collection - My code works, yet keep failing tests?!

Tell us what’s happening:
I’ve inputted every test value, and the output is correct, yet the test keeps telling me it isn’t working. For example:

After updateRecords(5439, "artist", "ABBA") , artist should be "ABBA"

But artist IS ABBA! My code works. Why does it keep saying I’m wrong?

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

// Alter values below to test your code
updateRecords(1245, "album","Riptide");
console.log(collection[1245]["album"]);

Your browser information:

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

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

You are not returning the collection, that’s an issue

Plus you have a small logic thing

What happens if prop is tracks and value is an empty string?

There is one that is executed before reaching last clause

1 Like

Thanks!!! I was going crazy trying to figure it out, and all I was missing was a single line I overlooked. (return collection)

The way I interpret the challenge is that if value is empty, then delete the property even if there’s stuff currently in it.

Your first else if will execute if prop === "tracks" && value === ""

If for some reason one try to delete tracks even if already is not there, you will instead set tracks to [""]

1 Like

I see. Thanks. Adding && value !== “” to the first else if should resolve this.