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.