My Record Collection

Tell us what’s happening:
Trying to complete this task and my code fails to fufill these parameters:

After updateRecords(2548, “artist”, “”), artist should not be set
After updateRecords(2548, “tracks”, “”), tracks should not be set
Dont know how to make sure artists and tracks are not set when value is an empty string

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

// Alter values below to test your code
updateRecords(5439, "artist", "ABBA");
updateRecords(5439, "tracks", "Take a Chance on Me");
updateRecords(2548, "artist", "");
updateRecords(1245, "tracks", "Addicted to Love");
updateRecords(2468, "tracks", "Free");
updateRecords(2548, "tracks", "")
updateRecords(1245, "album", "Riptide");

Your browser information:

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

  else if(prop!= "tracks" && value ==""){
    collection[id][prop]; // this line doesn't do anything.
  }

i know. that is me trying to not have artists or tracks set to anything. Its not working

That’s because you’re not doing anything. No action is performed and the value remains unchanged.

isnt that what the question is asking though? bc if i comment out that piece of code i still have the same problem.

Exactly. If you delete the three lines I quoted above completely, it wouldn’t change anything because those three lines don’t do anything. They serve no purpose.

  • the line collection[id][prop]; does nothing and is functionally equivalent to a blank line
  • the condition else if(prop!= "tracks" && value ==""){ is never met because it is preceded by else if(value ==""){. Since your second condition is a subset of a previous condition, it will not be evaluated because a matching if has already been executed.
  • So then if we look at the contents of else if(value ==""){, we see that you have delete collection[id].prop;. Because your used dot-notation, this deletes a property named “prop”. Since none of the records have this property, no change is made.