Record Collection assist

Record Collection assist
0

#1

Tell us what’s happening:
I am getting an error that collection[id][prop] is undefined when using an input of (5439, “tracks”, “song”) and don’t know how to correct it. Any help is appreciated.

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][prop] !== "tracks" && value !== ""){
    console.log(collection[id][prop]);
  collection[id][prop].push(value);}
  else if (collection[id][prop] == "tracks" && value == "" ) {
    collection[id][prop] = [value];
  }
  else if (collection[id][prop] == "tracks" && value !=="" ) {
    collection[id][prop].push(value);
  }
  else {
    delete collection[id][prop];
  }
  
  return collection;
}

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

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:62.0) Gecko/20100101 Firefox/62.0.

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


#2

You are going to get the undefined problem here because if collection[id][prop] !== "tracks" that means that you are not targeting an array and If you try to use push on something else then that, it will not work and you will get the error: Cannot read property 'push' of undefined.

I’m pointing out this error only as a response to your main question, but there are many others that should be fixed.

So read the challenge carefully and try to pay attention to what you are targeting: is it an object? an Array? a value?..etc.

And don’t forget to read this carefully: ...but the album doesn't have a "tracks"... which is not implemented in your else if that comes right after the if statement… etc.

I hope this was helpful
and it’s time now for you to correct the mistakes and find a solution to this challenge.


#3

What other errors are there that should be fixed? The code says it meets all except the tracks requirement in the tests?


#4

Would you please post your new code so that I can see where’s the problem?


#5

I am have trouble figuring out what to do next. How do I target an array so it is not considered “undefined”? Feeling stuck…


#6

What do you mean by target an array?

FYI - You do know that you are deleting the objects contained in collection and not just one of the collection objects’ properties?

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

For example, if value == “” and id was “2548”, then you could be deleting:

{
  "album": "1999",
  "artist": "Prince",
  "tracks": [ 
    "1999", 
    "Little Red Corvette" 
  ]
}

#7

Good point. Thanks for bring my attention to it.


#8

In my previous explanation, I said that when you are not targeting an array, you should not use push. and as I can see, you corrected the mistake in your first IF statement.

Another Hint that may help: Be careful with else ifs statements. You should set priorities: A code in else if that has more priority to run than another contained in if / else if statement, if put in the wrong place, it will not run.