Basic JavaScript - Record Collection

**How does the “record” parameter get associated with the “recordCollection” object? **
I’m looking at the solution for this challenge, and I don’t understand why:

  1. The object recordCollection is accessed through record[id][prop] rather than recordCollection[id][prop].
  2. In the description of the problem it says “You start with an updateRecords function that takes an object literal, records” …but records is just the first function parameter, not the object.

Clearly there is something that’s going over my head. Thanks for any explanations!

  **Your code so far**
// Setup
const recordCollection = {
2548: {
  albumTitle: 'Slippery When Wet',
  artist: 'Bon Jovi',
  tracks: ['Let It Rock', 'You Give Love a Bad Name']
},
2468: {
  albumTitle: '1999',
  artist: 'Prince',
  tracks: ['1999', 'Little Red Corvette']
},
1245: {
  artist: 'Robert Palmer',
  tracks: []
},
5439: {
  albumTitle: 'ABBA Gold'
}
};

// Only change code below this line
function updateRecords(records, id, prop, value) {
// 1
if (prop != 'tracks' && value != ''){
records[id][prop] = value;
} else
// 2 (not working)
if (prop === 'tracks' && records[id].hasOwnProperty === false)
{
records[id][prop] = [value];
} else

// 3 (not working)
if (prop === 'tracks' && value != '')
{
records.id.tracks.push(value);
} else

// 4
if (value === "")
{
delete records.id[prop];
}

return records;
}

updateRecords(recordCollection, 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/103.0.0.0 Safari/537.36

Challenge: Basic JavaScript - Record Collection

Link to the challenge:

Formatted for readability

// Only change code below this line
function updateRecords(records, id, prop, value) {
  // 1
  if (prop != 'tracks' && value != '') {
    records[id][prop] = value;
  }
  // 2 (not working)
  else if (prop === 'tracks' && records[id].hasOwnProperty === false) {
    records[id][prop] = [value];
  }

  // 3 (not working)
  else if (prop === 'tracks' && value != '') {
    records.id.tracks.push(value);
  }

  // 4
  else if (value === "") {
    delete records.id[prop];
  }

  return records;
}

This syntax records.id.tracks is wrong. You cannot access property values with dot notation when the property names are stored in dot notation.


records[id].hasOwnProperty is a function, but you aren’t calling it. What property do you want to know about?


The specific value of record is determined by the arguments when the function updateRecords is called:

Thank you so much, I don’t know why I couldn’t grasp how calling updateRecords determined the value of record. I am much less confused now!