Record Collection Aug 06, 2019

Tell us what’s happening:
Here I know my mistake, but I dont know how to solve it. Can someone give me hints where did I go 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;
  }
  //if prop is not(!==) tracks and the value is not(!) empty("")
  else if (prop === "tracks" && value !== ""){
    collection[id][prop] = [];
    collection[id][prop].push(value);
  }
  // if prop is(==) track and the value is not(!) empty
  // the tracks property SUPPOSEDLY give an empty array and push any value
  // Tried updateRecords(2468, "tracks", "Free") result: Doesnt work
  // Update: I now my mistake here, is that I created a new array in this matter which overwrites the given track values: "1991" and "Little Red Corvette";

  else if (value == ""){
    delete collection[id][prop];
  }
  // if the value is empty
  
  return collection;
}

// Alter values below to test your code
//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/75.0.3770.142 Safari/537.36.

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

The error you have can be fixed by using another if/else statement within your else if.

Your code

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

Should become something like this!

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

The first line of your statement stays the same, but the second line will verify if the record you are changing already has a tracks property or not. If that is true, then it will continue to push the property onto the end of the array. But only if it isn’t true, then will it make a new array (containing the value you want to add with it.)

Hope this sheds some light on your function!

what’s your mistake?

The commented paragraph in the code. Thank you for attempting to help

I have seen that in the hints section, tho I didn’t look for it until now. But I didnt understand it and with you saying that. It helps a lot. Thank you for Helping!

1 Like

No problem! I’m ready to help anytime!