Record Collection Array markings causing problem?

I’ve reached the infamous record collection challenge. I’ve really struggled with this. It’s knocked me back by a few weeks as I’ve been trying to wrap my head around it.

I’ve got this far, but I’m not quite sure how to remove the array markings from the artist ‘ABBA’. I’m sure this is what they mean when they say ‘should be a string’

Any help is really massively appreciated!

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) {
if (!value) {
    delete records[id][prop];
} 
else if (!records[id].hasOwnProperty('tracks')) {
        records[id][prop] = [value];
}
else if (prop !== 'tracks') {
  records[id][prop] = value;
} 
else {
  records[id][prop].push(value);
}
return records;
}

updateRecords(recordCollection, 5439, 'artist', 'ABBA');
updateRecords(recordCollection, 5439, "tracks", "Take a Chance on Me")
updateRecords(recordCollection, 2548, "artist", "")
updateRecords(recordCollection, 1245, "tracks", "Addicted to Love")
updateRecords(recordCollection, 2468, "tracks", "Free")
updateRecords(recordCollection, 2548, "tracks", "")
updateRecords(recordCollection, 1245, "albumTitle", "Riptide")

console.log(JSON.stringify(recordCollection))

Challenge: Record Collection

Link to challenge

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/record-collection

When I run this:

updateRecords(recordCollection, 5439, 'artist', 'ABBA');
console.log(JSON.stringify(recordCollection, null, 2))

I get the output:

{
  // ...
  "5439": {
    "albumTitle": "ABBA Gold",
    "artist": [
      "ABBA"
    ]
  }
}

The error message is:

After updateRecords(recordCollection, 5439, "artist", "ABBA") , artist should be the string ABBA

I agree with the message. I would expect artist to be a string. That is what it is in other cases. But You’ve given it an array of strings.

When I fix that, your code passes for me.

1 Like

You are adding an array if the object doesn’t have a track property but you are doing it no matter what value prop is. So you also do it when prop is not track (i.e. when it is artist).

You probably also don’t want to hardcode the key you are checking for in hasOwnProperty but use the prop parameter instead (not that it changes anything for the tests in this case).

1 Like

What do you mean by hard-coding the key?..

I just mean that instead of using the “fixed” string 'tracks' (which would be considered a hardcoded value).

records[id].hasOwnProperty('tracks')

You can use the prop parameter.

records[id].hasOwnProperty(prop)
1 Like