[SOLVED] Question on Basic JavaScript: Record Collection Challenge

Hi everyone,

I am struggling with understanding the basic code solution. My thinking is I’m not connecting something from a previous lesson and would like to get a ‘play by play’ explanation of the solution. I commented my understanding using // :

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) {
        // First checks if PROP is equal to TRACKS AND if VALUE isn't a blank string
	if (prop === "tracks" && value != "") {  
                // If prop is TRACKS and VALUE isn't empty ("")          
		if(collection[id][prop]) {
                  // Pushes the value onto the end of the album's existing tracks array
                  collection[id][prop].push(value);
    }
    // If prop is "tracks" but the album doesn't have a "tracks" property, creates an empty array before adding the new value to the album's corresponding property
    else {
      collection[id][prop]=[value];
    }
  }
  // Checks if VALUE equals empty string ??
  else if (value !== "") {
    collection[id][prop] = value;
  } 
  else {
    // If both these checks fail (meaning value must be an empty string). Then the key (prop) is removed from the object.
    delete collection [id][prop];
  }

  return collection;
}

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

Your browser information:

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

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

I don’t remember all the requirements of this challenge, but I think that you might be missing the case where collection[id] doesn’t exist?

Also, you have a syntax error here in the form of an extra space:

  delete collection [id][prop];

Is this understandable?

function updateRecords(id, prop, value) {
  if (prop === "tracks" && value !== "") { // first it checks if prop is tracks and value is not an empty string
   if(collection[id][prop]) { // if "collection[id][prop] is truthy (as in, it exists) push the new value into the array
    collection[id][prop].push(value);
   }
   else { // if that property doesn't exist then create an array for that property with "value" inside of it
    collection[id][prop]=[value];
   }
  } else if (value !== "") { // if it is not tracks and value is not an empty string, set that value to that property
    collection[id][prop] = value;
  } else { // else if it is not tracks and value is an empty string, delete that property
    delete collection[id][prop];
  }

  return collection;
}
2 Likes

Yes!! Thank you so much! :smile:

Your code has been blurred out to avoid spoiling a full working solution for other campers who may not yet want to see a complete solution. In the future, if you post a full passing solution to a challenge and have questions about it, please surround it with [spoiler] and [/spoiler] tags on the line above and below your solution code.

Thank you.

Sorry, as the OP was talking about the code from the hints section (and posted that) didn’t think of blurring it out

No worries. Just something we try to do.

@ilenia Could you please explain the id, prop, and value references? I don’t know how they connect to the rest of the array, and connect to the function when they are mentioned the other times. I know the for example in console.log that when it’s called outside of the function at the end then those can give values to the corresponding function values. I don’t get how that works here. I saw another solution use id, prop, and value and I don’t know where those are coming from.

Those are the parameters of the function,

function updateRecords(id, prop, value) { /*...*/ };

which are filled with values when the function is called with arguments:

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

do you know what function paramenters and function arguments are?

so id, prop and value are variables that hold a value, what to do with this values is explained in the challenge description

1 Like