id (like 2548), a property prop (like "artist" or "tracks"), and a value (like "Addicted to Love") to modify the data in this collection.
-If prop isn't "tracks" and value isn't empty (""), update or set the value for that record album's property.
-Your function must always return the entire collection object.
-There are several rules for handling incomplete data:
-If prop is "tracks" but the album doesn't have a "tracks" property, create an empty array before adding the new value to the album's corresponding property.
-If prop is "tracks" and value isn't empty (""), push the value onto the end of the album's existing tracks array.
-If value is empty (""), delete the given prop property from the album.
-Hintsbracket notation when accessing object properties with variables.
-The `push` array method will be helpful here. Check out our Manipulate Arrays With push() challenge to review how it works.
-You may refer back to Manipulating Complex Objects Introducing JavaScript Object Notation (JSON) for a refresher.
+
+You are given a JSON object 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 like `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 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 `collection` object is used for the tests.
collection object's initialization
- testString: 'assert(code.match(/var collection = {\s*2548: {\s*album: "Slippery When Wet",\s*artist: "Bon Jovi",\s*tracks: \[\s*"Let It Rock",\s*"You Give Love a Bad Name"\s*\]\s*},\s*2468: {\s*album: "1999",\s*artist: "Prince",\s*tracks: \[\s*"1999",\s*"Little Red Corvette"\s*\]\s*},\s*1245: {\s*artist: "Robert Palmer",\s*tracks: \[ \]\s*},\s*5439: {\s*album: "ABBA Gold"\s*}\s*};/g));'
- - text: After updateRecords(5439, "artist", "ABBA"), artist should be "ABBA"
- testString: assert(updateRecords(5439, "artist", "ABBA")[5439]["artist"] === "ABBA");
- - text: After updateRecords(5439, "tracks", "Take a Chance on Me"), tracks should have "Take a Chance on Me" as the last element.
- testString: assert(updateRecords(5439, "tracks", "Take a Chance on Me")[5439]["tracks"].pop() === "Take a Chance on Me");
- - text: After updateRecords(2548, "artist", ""), artist should not be set
- testString: updateRecords(2548, "artist", ""); assert(!collection[2548].hasOwnProperty("artist"));
- - text: After updateRecords(1245, "tracks", "Addicted to Love"), tracks should have "Addicted to Love" as the last element.
- testString: assert(updateRecords(1245, "tracks", "Addicted to Love")[1245]["tracks"].pop() === "Addicted to Love");
- - text: After updateRecords(2468, "tracks", "Free"), tracks should have "1999" as the first element.
- testString: assert(updateRecords(2468, "tracks", "Free")[2468]["tracks"][0] === "1999");
- - text: After updateRecords(2548, "tracks", ""), tracks should not be set
- testString: updateRecords(2548, "tracks", ""); assert(!collection[2548].hasOwnProperty("tracks"));
- - text: After updateRecords(1245, "album", "Riptide"), album should be "Riptide"
- testString: assert(updateRecords(1245, "album", "Riptide")[1245]["album"] === "Riptide");
-
+ - text: After updateRecords(collection, 5439, "artist", "ABBA"), artist should be ABBA
+ testString: assert(updateRecords(_recordCollection, 5439, "artist", "ABBA")[5439]["artist"] === "ABBA");
+ - text: After updateRecords(collection, 5439, "tracks", "Take a Chance on Me"), tracks should have Take a Chance on Me as the last element.
+ testString: assert(updateRecords(_recordCollection, 5439, "tracks", "Take a Chance on Me")[5439]["tracks"].pop() === "Take a Chance on Me");
+ - text: After updateRecords(collection, 2548, "artist", ""), artist should not be set
+ testString: updateRecords(_recordCollection, 2548, "artist", ""); assert(!_recordCollection[2548].hasOwnProperty("artist"));
+ - text: After updateRecords(collection, 1245, "tracks", "Addicted to Love"), tracks should have Addicted to Love as the last element.
+ testString: assert(updateRecords(_recordCollection, 1245, "tracks", "Addicted to Love")[1245]["tracks"].pop() === "Addicted to Love");
+ - text: After updateRecords(collection, 2468, "tracks", "Free"), tracks should have 1999 as the first element.
+ testString: assert(updateRecords(_recordCollection, 2468, "tracks", "Free")[2468]["tracks"][0] === "1999");
+ - text: After updateRecords(collection, 2548, "tracks", ""), tracks should not be set
+ testString: updateRecords(_recordCollection, 2548, "tracks", ""); assert(!_recordCollection[2548].hasOwnProperty("tracks"));
+ - text: After updateRecords(collection, 1245, "albumTitle", "Riptide"), albumTitle should be Riptide
+ testString: assert(updateRecords(_recordCollection, 1245, "albumTitle", "Riptide")[1245]["albumTitle"] === "Riptide");
```