Record Collection - confused

Tell us what’s happening:
I am having difficulty understanding some of the code in the solution. Below is just the solution copied and pasted in. Can someone explain to me how the connection is made between the “id”, “prop” and “value” in updateRecords(id, prop, value) and the properties and values in the objects e.g. “2548”, “artist” and “Bon Jovi” when there were no variables id, prop and value defined and connected to them?

Also, I am having difficulty understanding this part of the code; what exactly does the part in bold mean if you had to translate from code to english :slight_smile: :

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

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 !==""){
   if (collection[id][prop]){
    collection[id][prop].push(value);
   }
   else {
    collection[id][prop]=[value];
   }
  } else if (value!==""){
    collection[id][prop] = value;
  } else {
    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; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0.

As you are posting a working solution, can you hide it between the spoiler tags?
[spoiler] code inside backticks here [/spoiler]


In the last line of the code (or in the tests) the function is called. In this case you have that id is 5439, prop is "artist" and value is "ABBA"

collection[id][prop] is accessing the values in the object.

Knowing this, are there other questions you have?

1 Like

Hi,

That’s just a function which accepts those three parameters - id, prop, value and should update the property’s value if it is existing. The connection is made through the structure of the data in the setup which is a map with the following structure:

{
  id: {
    property: value,
    property: value
  }
}

And you want to use the function updateRecords to update the artist property. So the id would be 1245, prop will be artist, value will be the new value from the property, let’s say Queen.

collection[id][prop] gets the value of the property. From the example above: collection[1245] will return { "artist": "Robert Palmer", "tracks": [ ] } (let’s call this record) and then record[prop] will return `“Robert Palmer”.

Hope this helps. : )

Thank you. So the structure basically implies it. I think I understand.

What I didn’t understand under the updateRecords function was the nested if-function. I didn’t realise that if there is both a “tracks” property (in the updateRecords(id, prop, value) and the value of the track isn’t empty, there can still be two possibilities i.e. there is a “tracks” property in the collection - in which case it pushes the value to the end of the array - or there is no “tracks” property in the collection - in which case it creates the array and adds the value to it. I see it now, thanks!