curriculum/challenges/english/blocks/basic-javascript/56533eb9ac21ba0edf2244cf.md
You are creating a function that aids in the maintenance of a musical album collection. The collection is organized as an object that contains multiple albums which are also objects. Each album is represented in the collection with a unique id as the property name. Within each album object, there are various properties describing information about the album. Not all albums have complete information.
The updateRecords function takes 4 arguments represented by the following function parameters:
records - an object containing several individual albumsid - a number representing a specific album in the records objectprop - a string representing the name of the album’s property to updatevalue - a string containing the information used to update the album’s propertyComplete the function using the rules below to modify the object passed to the function.
records object.value is an empty string, delete the given prop property from the album.prop isn't tracks and value isn't an empty string, assign the value to that album's prop.prop is tracks and value isn't an empty string, but the album doesn't have a tracks property, create an empty array and add value to it.tracks and value isn't an empty string, add value to the end of the album's existing tracks array.Note: A copy of the recordCollection object is used for the tests. You should not directly modify the recordCollection object.
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'
}
};
After updateRecords(recordCollection, 5439, "artist", "ABBA"), artist should be the string ABBA
assert(
updateRecords(_recordCollection, 5439, 'artist', 'ABBA')[5439]['artist'] ===
'ABBA'
);
After updateRecords(recordCollection, 5439, "tracks", "Take a Chance on Me"), tracks should have the string Take a Chance on Me as the last and only element.
assert(
updateRecords(_recordCollection, 5439, 'tracks', 'Take a Chance on Me') &&
_recordCollection[5439]['tracks'].length === 1 &&
_recordCollection[5439]['tracks'].pop() === 'Take a Chance on Me'
);
After updateRecords(recordCollection, 2548, "artist", ""), artist should not be set
updateRecords(_recordCollection, 2548, 'artist', '');
assert(!_recordCollection[2548].hasOwnProperty('artist'));
After updateRecords(recordCollection, 1245, "tracks", "Addicted to Love"), tracks should have the string Addicted to Love as the last element.
assert(
updateRecords(_recordCollection, 1245, 'tracks', 'Addicted to Love')[1245][
'tracks'
].pop() === 'Addicted to Love'
);
After updateRecords(recordCollection, 2468, "tracks", "Free"), tracks should have the string 1999 as the first element.
assert(
updateRecords(_recordCollection, 2468, 'tracks', 'Free')[2468][
'tracks'
][0] === '1999'
);
After updateRecords(recordCollection, 2548, "tracks", ""), tracks should not be set
updateRecords(_recordCollection, 2548, 'tracks', '');
assert(!_recordCollection[2548].hasOwnProperty('tracks'));
After updateRecords(recordCollection, 1245, "albumTitle", "Riptide"), albumTitle should be the string Riptide
assert(
updateRecords(_recordCollection, 1245, 'albumTitle', 'Riptide')[1245][
'albumTitle'
] === 'Riptide'
);
// 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) {
return records;
}
updateRecords(recordCollection, 5439, 'artist', 'ABBA');
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 (prop === 'tracks') {
records[id][prop] = records[id][prop] || [];
records[id][prop].push(value);
} else {
records[id][prop] = value;
}
return records;
}