Record Collection first test

Tell us what’s happening:
I know this problem has been posted many times, so sorry for the repetition.

I pass all but first Test. Even when I do the test on my own it appears as “ABBA” on the console window. I don’t why test isn’t passing

Your code so far


// 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"
    }
};
// 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) {
 
 if(!collection[id].hasOwnProperty("tracks")){
   collection[id][prop] = [];
   collection[id][prop].push(value);
 } else if(prop==="tracks" && value!==""){
   collection[id][prop].push(value);
 } else if(value ===""){
   delete collection[id][prop];
 } else {
   collection[id][prop] = value; 
 }
 return collection;
}
// Alter values below to test your code
updateRecords(1245, "album", "Riptide");
console.log(collection[1245]["album"]);
updateRecords(5439, "artist", "ABBA");
console.log(collection[5439].artist);

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/record-collection

Notice that in result of your function artist is inserted as an array, not as a string. Your first IF is handling both tracks and artist props and treat them as an array elements, but only tracks should be an array, whilst artist should be a string.

function updateRecords(id, prop, value) {

if(value !== "" && prop !== "tracks"){
  collection[id][prop] = value;
} else if(!collection[id].hasOwnProperty("tracks")){
  collection[id][prop] = [];
  collection[id][prop].push(value);
} else {
  collection[id][prop].push(value);
}
if(value === ""){
  delete collection[id][prop];
}
 return collection;
}

I can’t seem to pass the third test. Artist keeps being set. Should I be adding another conditional somewhere?

Apologies for the poor markup.

You can close whole logic within three ifs -> if…else if…else.

Notice that you have just three actions:

  1. Deletion if value is empty.
  2. Adding tracks (and creating and array in this prop if does not exist).
  3. Setting value for the rest of the props.

or you can use your current code, but have to change order of ifs. Anyhow try to keep all ifs in one if…else if… statement.