Record Collection Challenge - can't delete prop

Tell us what’s happening:
I have passed all the tests except deleting when the value is empty and I really can’t figure out where’s the mistake. Thank you to anyone you will help me with this!

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
}else if(prop="tracks" && !(collection[id].hasOwnProperty("tracks"))){
collection[id]["tracks"]=[""]
collection[id]["tracks"].push(value)
}else if(prop="tracks" && value !=""){
collection[id]["tracks"].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 (Windows NT 6.3; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0.

Challenge: Record Collection

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

You have two typos. You are confusing the assignment operator with the equality operator in some comparisons. I strongly suggest indenting your code to make it easier to read and spot these kinds of typos.

Below is your code properly intended.

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

Thank you!!! I was focusing on the last line of the code since I thought I had passed the other tests.
Now I am wondering why it didn’t return an error given the typos? Was Javascript just skipping to the second comparison? And why was it affecting “delete colletion [id][prop]”?

No errors because you were just assigning a value to the prop instead.

If the value you were assigning to prop was truthy, then it would check the other condition. Otherwise, the other condition is not needed because the overall statement would be false.

For the test case updateRecords(2548, "artist"), the code where you had = instead of == or === in your comparisons, prop was “artist”, so the first if condition would be false. The first else if statement would attempt to assign prop the result of the following expression:

“tracks” && !(collection[id].hasOwnProperty(“tracks”)

Since the condition after the && would evaluate to false, props gets assigned the value false, which makes the entire expression be false. Next, the second else if statement would evaluate to false, so the else statement code block would execute. Since prop is false at this point, your code attempts to delete a prop named “false” from collection[“2548”].

1 Like