Record Collection execution of flow

Tell us what’s happening:
I wrote the commented code below out first and tried running the tests and not all tests passed. The After updateRecords(2548, "tracks", "") , tracks should not be set test failed. Then I broke down the if/else if statements into single if statements and all tests passed. Can someone please explain me why my first commented out code failed and when I separated them out all tests passed? Isn’t the else if statements written exactly in the same flow of my if statements?

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"
}
};

// Only change code below this line
function updateRecords(id, prop, value) {
if (prop !== "tracks" && value !== "") {
  collection[id][prop] = value;
}

if (prop === "tracks" && !collection[id].hasOwnProperty("tracks")) {
  collection[id][prop] = [];
}

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

if (value === "") {
  delete collection[id][prop];
}

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

return collection;
}

// Alter values below to test your code
updateRecords(5439, "artist", "ABBA");

Your browser information:

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

Challenge: Record Collection

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

@MarioJr You can actually figure out the difference yourself by adding a unique console.log for each if statement in the commented out code, to see which code blocks execute and then do the same for the if /else if version. You will see that the commented out code might have multiple statements executing for specific tests. With the if / else version, that is impossible due to the nature of such statements.

SPOILER:

For the following test case:

updateRecords(5439, "tracks", "Take a Chance on Me")

the 2nd and 3rd if statements of the commented code evaluate to true,

1 Like

@camperextraordinaire I really appreciate your feedback and that definitely helped me see the difference between both.