diff --git a/javascript/FreeCodeCamps/Basic JavaScript/Record Collection.md b/javascript/FreeCodeCamps/Basic JavaScript/Record Collection.md index c3b7a84..28b3906 100644 --- a/javascript/FreeCodeCamps/Basic JavaScript/Record Collection.md +++ b/javascript/FreeCodeCamps/Basic JavaScript/Record Collection.md @@ -1,26 +1,16 @@ # Record Collection -You are given a `JSON` object representing (a small part of) your record collection. -Each album is identified by a unique `id` number (`its key`) and has -several properties. Not all albums have complete information. - -Write a function which takes an `id`, a property (prop), and a value. - -For the given `id` in collection: - -If prop does not contain the key `tracks`, then update or set -the value for that incomplete prop. - -If prop does not contain the key `tracks` before you update -it, create an empty array before pushing a track to it. - -If prop does contain the key `tracks` and its value is non-blank, -then push the value onto the end of its existing tracks array. - -If value is blank, delete that prop. - -Always return the entire collection object. - +You are given an object literal representing a part of your musical album collection. Each album has a unique id number as its key and several other properties. Not all albums have complete information.
+
+You start with an `updateRecords` function that takes an object literal, `records`, containing the musical album collection, an `id`, a `prop` (like `artist` or `tracks`), and a `value`. Complete the function using the rules below to modify the object passed to the function.
+
+Your function must always return the entire record collection object.
+- If `prop` isn't `tracks` and value isn't an empty string, update or set that album's `prop` to `value`. +- If `prop` is` tracks` but the album doesn't have a `tracks` property, create an empty array and add `value` to it. +- If `prop` is `tracks` and `value` isn't an empty string, add `value` to the end of the album's existing `tracks` array. +- If `value` is an empty string, delete the given `prop` property from the album. +Note: A copy of the `recordCollection` object is used for the tests.
+
## Hints - Use `bracket notation` when accessing object properties with variables. @@ -32,97 +22,72 @@ You may refer back to Manipulating Complex ObjectsIntroducing JavaScript Object ```javascript // Setup -var collection = { - "2548": { - "album": "Slippery When Wet", - "artist": "Bon Jovi", - "tracks": [ - "Let It Rock", - "You Give Love a Bad Name" - ] - }, - "2468": { - "album": "1999", - "artist": "Prince", - "tracks": [ - "1999", - "Little Red Corvette" - ] - }, - "1245": { - "artist": "Robert Palmer", - "tracks": [ ] - }, - "5439": { - "album": "ABBA Gold" - } +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' + } }; -// Keep a copy of the collection for tests -var collectionCopy = JSON.parse(JSON.stringify(collection)); // Only change code below this line -function updateRecords(id, prop, value) { - - - return collection; +function updateRecords(records, id, prop, value) { + return records; } -// Alter values below to test your code -updateRecords(5439, "artist", "ABBA"); +updateRecords(recordCollection, 5439, 'artist', 'ABBA'); ``` ### Answers ```javascript // Setup -var collection = { - "2548": { - "album": "Slippery When Wet", - "artist": "Bon Jovi", - "tracks": [ - "Let It Rock", - "You Give Love a Bad Name" - ] - }, - "2468": { - "album": "1999", - "artist": "Prince", - "tracks": [ - "1999", - "Little Red Corvette" - ] - }, - "1245": { - "artist": "Robert Palmer", - "tracks": [ ] - }, - "5439": { - "album": "ABBA Gold" - } +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' + } }; -// Keep a copy of the collection for tests -var collectionCopy = JSON.parse(JSON.stringify(collection)); // Only change code below this line -function updateRecords(id, prop, value) { +function updateRecords(records, id, prop, value) { - if (value === '') { - delete collection[id][prop]; // If the value is empty remove the prop - } else if (prop !== "tracks") { - collection[id][prop] = value; + if (value === '') { + delete records[id][prop]; + } else if (prop === 'tracks') { + records[id][prop] = records[id][prop] || []; // this is called shortcircuit evaluation, see below for explanation + records[id][prop].push(value); } else { - if (!collection[id].hasOwnProperty('tracks')) { - collection[id].tracks = []; - collection[id].tracks.push(value); - } else { - collection[id].tracks.push(value); - } + records[id][prop] = value; } - return collection; + return records; } - -// Alter values below to test your code -updateRecords(2468, "tracks", "Free"); +updateRecords(recordCollection, 5439, 'artist', 'ABBA'); ``` ### Thinking @@ -131,4 +96,4 @@ updateRecords(2468, "tracks", "Free"); 2. If the prop is not tracks it's easy to add the value to this prop 3. Here we need to find if the object have a property tracks if not we create this prop with a empty array and we push it the value. I use `.hasOwnProperty` for -doing this. \ No newline at end of file +doing this.