Why my code didn't pass the tests?

Tell us what’s happening:

Hi guys,
I don’t know why my code didn’t pass the following test:

After updateRecords(2548, "artist", "") , artist should not be set
After updateRecords(2548, "tracks", "") , tracks should not be set

I tried it in an external environment and it seems to work properly as expected.
Is there anyone who can explain this to me?

Many thanks.

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 (!id || !prop || value.length == 0) {
  return collection
} 

let objectFiltered = collection[id]

let objectValue

if (objectFiltered[prop] && prop == 'tracks') {
  objectValue = [...objectFiltered[prop], value]
} else if (!objectFiltered[prop] && prop == 'tracks') {
  objectValue = [value]
} else {
  objectValue = value
}

objectFiltered = {...objectFiltered, [prop]: objectValue}

collection[id] = objectFiltered

return collection;
}

updateRecords(5439, "artist", "ABBA");

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36.

Challenge: Record Collection

Link to the challenge:

You have missed in the challenge description condition, that when value is empty then prop should be deleted from collection for given ID.

OMG! I didn’t realize it. Thanks.

Hi sanity,
I have changed the function that manages the deletion process but it is still not working properly. Can you help me? Thanks

function updateRecords(id, prop, value) {
  if (!id || !prop) {
    return collection
  } 
  
  let objectFiltered = collection[id]
  
  let objectValue
  
  if (objectFiltered[prop] && prop == 'tracks') {
    objectValue = [...objectFiltered[prop], value]
  } else if (!objectFiltered[prop] && prop == 'tracks') {
    objectValue = [value]
  } else if (value.length == 0) {
    //console.log(value) 
    delete objectFiltered[prop]
  }  else {
    objectValue = value
  }
  
  objectFiltered = {...objectFiltered, [prop]: objectValue}
  
  collection[id] = objectFiltered

  return collection;
}

Notice two things, for prop tracks either first or the second condition will be true, there’s no way to reach further conditions in such case. Other thing is to consider what still happens in function after the prop is deleted from objectFiltered.

As for there is no way to reach further conditions in this case this is not entirely true based on my tests. In any case, I run my code in an external environment simulating the expected tests and for each test the result is what is expected. I don’t have the slightest idea how to close the challenge with my code which I have rewritten and which I bring back below, so I will copy and paste the suggestion provided by freeCodeCamp.

function updateRecords(id, prop, value) {
  if (!id || !prop) return collection 
  
  let objectFiltered = collection[id]
  
  let objectValue = value
  
  if (prop == 'tracks' && objectFiltered[prop]) objectValue = [...objectFiltered[prop], value]
  
  if (prop == 'tracks' && !objectFiltered[prop]) objectValue = [value]
  
  if (value.length == 0) delete objectFiltered[prop]

  collection[id] = {...objectFiltered, [prop]: objectValue}

  return collection;
}