Basic JavaScript - Record Collection

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

Your code so far

I need assistance here
// 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) {
  if (prop != "tracks" && value != '') {
    records[id][prop] = value;
  } else if (prop == "tracks" && records.hasOwnProperty("tracks")) {
    records[id][prop] = [];
  } else if (prop == "tracks" && value != '') {
    records[id][prop] = records[id][prop].push(value);
  } else if (value == '') {
    delete records[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/110.0.0.0 Safari/537.36

Challenge: Basic JavaScript - Record Collection

Link to the challenge:

You’re pretty close but you missed a few critical details.

  • If prop is tracks but the album doesn’t have a tracks property, create an empty array and add value to it.
else if (prop == "tracks" && records.hasOwnProperty("tracks")) {
    records[id][prop] = [];
  }

Your conditional statement checks if the records does have a ‘tracks’ property. Also, you also need to be more specific as you’re checking the property of a particular record (i.e. you need to include the id field). Finally, you’re creating an array but not pushing any value to it.

records[id][prop] = records[id][prop].push(value);

This is not the correct way to push a value to an array. You don’t need the first half of the expression.

delete records[prop];

Again, this won’t work, as you need to include the id field to specify the particular record.

Fix these things and your code will pass!

1 Like
records.hasOwnProperty("tracks") != prop

Is this how it is done?

No. You have correctly accessed properties within records in other parts of your code, with records[id][prop]. However, if you want to check if a particular record has a particular property in the first place, you first access the record (records[id]) and then check if it has the property, using hasOwnProperty() as you did.

Whenever you want to reverse a condition (e.g. to check that a record doesn’t have a specific property), you can just negate the expression by prefixing it with !.

EXAMPLE:

if (a == 1) {
return 'yes'
}

…and the reverse

if (!a == 1) {
return 'no'
}

…which could also be written as

if (a != 1) {
return 'no'
}

The first type of negation is extremely useful in cases where the second isn’t valid (as in your case above).

thanks for the help it worked. You are really good.