recordCollection trying to create an array but doesn't work

Tell us what’s happening:
I’ve been trying to create an array inside the object for one hour now, just couldn’t do it.

After updateRecords(recordCollection, 5439, "tracks", "Take a Chance on Me") , tracks should have the string Take a Chance on Me as the last element.

My code just couldn’t pass this step because there isn’t any array at the beginning you have to create one. At the first, I created an empty array but that didn’t work since there are arrays with values. So, I came up with these Array.isArray() idea, but it doesn’t work as I wanted, it creates an array the second time when you pass a value inside the object. Please help.

  **Your code so far**

// Setup
const recordCollection = {
2548: {
  albumTitle: 'Slippery When Wet',
  artist: 'Bon Jovi',
  tracks: ['Let It Rock', 'You Give Love a Bad Name']
},
2468: {
  albumTitle: '1999',
  artist: 'Prince',
  tracks: ['1999', 'Little Red Corvette']
},
1245: {
  artist: 'Robert Palmer',
  tracks: []
},
5439: {
  albumTitle: 'ABBA Gold'
}
};

// Only change code below this line
function updateRecords(records, id, prop, value) {
if(value == ""){
  delete records[id][prop];
} else if(prop == "tracks" && !records[id].hasOwnProperty("tracks")){
  records[id][prop] = value;
} else if(prop == "tracks" && value != undefined){ 
  if(!Array.isArray(records[id][prop])){      
    records[id][prop] = [];          // problem here!!!
  }
  records[id][prop].push(value);
} else {
  records[id][prop] = value;
}

return records;
}

updateRecords(recordCollection, 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/98.0.4758.102 Safari/537.36

Challenge: Record Collection

Link to the challenge:

No, actually, your issue is here. I suggest you use console.log to see what is being executed and when, and to see the output

2 Likes

I only had to change the order. Thanks again :slight_smile:

  if(value == ""){
    delete records[id][prop];
  } else if(prop == "tracks" && value != undefined){
    if(!Array.isArray(records[id][prop])){
      records[id][prop] = [];
    }
    records[id][prop].push(value);
  } else if(prop == "tracks" && !records[id].hasOwnProperty("tracks")){
    records[id][prop] = value;
  } else {
    records[id][prop] = value;
  }

when is this executed?

  • If prop is tracks but the album doesn’t have a tracks property, create an empty array and add value to it.

isn’t that done with this piece of code?

You seem to have some misunderstandings under the category of “what type of thing is every variable”.

function updateRecords(records, id, prop, value) {
  console.log("records: ", typeof(records));
  console.log("id:      ", typeof(id));
  console.log("prop:    ", typeof(prop));
  console.log("value:   ", typeof(value)); // is this an array?
  console.log("value != undefined:", value != undefined); // will this ever happen?
  return records;
}

yeah you’re right, I deleted the block and it worked anyway

value != undefined

yes, this was wrong and unnecessary.

my final code

function updateRecords(records, id, prop, value) {
  if(value == ""){
    delete records[id][prop];
  } else if(prop == "tracks"){
    if(!Array.isArray(records[id][prop])){
      records[id][prop] = [];
    }
    records[id][prop].push(value);
  } else {
    records[id][prop] = value;
  }

    return records;
}
1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.