RecordCollection: dot vs. braket notation

Tell us what’s happening:
Describe your issue in detail here.

Hello,

As I understand, recordCollection is an object. ‘id’ is its property and its value itself is another object.
If I want to get ‘Bon Jovi’, the location will be recordCollection.2548.artist
If I want to get ‘Let It Rock’, the location will be recordCollection.2548.tracks[0]

I don’t think dot and bracket notation are different as long as property name doesn’t have a white space inside.
However, my code gives me like below. Can you help me to find what I think wrong?

TypeError: Cannot set property ‘prop’ of undefined

  **Your code so far**

// Setup
var 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){
if(prop !== 'tracks' && value !== ""){
  records.id.prop = value
}else if(prop === 'tracks' && records.id.hasOwnProperty('tracks') === false){
  records.id.prop = [value]
}else if(prop === 'tracks' && value !== ""){
  records.id.prop.push(value)
}else 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/92.0.4515.131 Safari/537.36

Challenge: Record Collection

Link to the challenge:

You can’t use dot notation with a variable holding the name of the property you want. You n only use dot notation with the exact literal name of the property.

I got it. There is no actual property which name is ‘prop’. That’s why it said ‘prop’ is not defined. Thank you so much!

1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.