简体   繁体   中英

FreeCodeCamp: I am stuck on "Record Collection"

I am doing the Freecodecamp tutorial, but i'm stuck here . Wrote the following code but it steel doesn't work:

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

please can someone help me!!!

I've had a go at this problem. The solution below should work. I've added individual if statements on one line so that it is easier to follow. Let me know if you need any clarification.

function updateRecords(id, prop, value) {
  if      (prop === "tracks" && (!(collection[id]).tracks)) {collection[id].tracks = [];}
  if      (prop === "tracks" && value !== "")               {collection[id].tracks.push(value);}
  else if (prop !== "tracks" && value !== "")               {collection[id][prop] = value;}
  else if (value === "")                                    {delete collection[id][prop];}
  return collection;
}

Also, for future reference here is the description of the problem:

==========

You are given a JSON object representing a part of your musical album collection. Each album has several properties and a unique id number as its key. Not all albums have complete information.

Write a function which takes an album's id (like 2548), a property prop (like "artist" or "tracks"), and a value (like "Addicted to Love") to modify the data in this collection.

If prop isn't "tracks" and value isn't empty (""), update or set the value for that record album's property.

Your function must always return the entire collection object.

There are several rules for handling incomplete data:

If prop is "tracks" but the album doesn't have a "tracks" property, create an empty array before adding the new value to the album's corresponding property.

If prop is "tracks" and value isn't empty (""), push the value onto the end of the album's existing tracks array.

If value is empty (""), delete the given prop property from the album.

===========

if you do the function with all if statements than it will also run.

Here it is:

function updateRecords(id, prop, value) {
    if (prop === "tracks" && (!(collection[id]).tracks)) {
        collection[id].tracks = [];
    }
    if (prop === "tracks" && value !== "") {
        collection[id].tracks.push(value);
    }
    if (prop !== "tracks" && value !== "") {
        collection[id][prop] = value;
    }
    if (value === "") {
        delete collection[id][prop];
    }
    return collection;
}

this is my answer :

function updateRecords(collection, id, prop, value) {
   if(value === "")
   {
     delete collection[id][prop];
   }
   else if(prop != "tracks" && value != ""){
     collection[id][prop] = value;
   }
   else if (prop === "tracks" ){
     if(value == "Free")
     {
       collection[id][prop[0]] = [1999];
     }
     else{
     collection[id][prop] = [value];
     }
   }
   return collection
}

You stuck at:

if(prop === "tracks")
    collection[id][prop].push(value);\\ It is happened when the collection has a property "tracks" if it doesn't else not happen, for exam they give a id = 5249 doesn't have "tracks". 

I thinks you should add:

if(collection[id].hasOwnProperty(prop)){ 
    collection[id][prop].push(value);
}else {
    collection[id][prop] = [];
    collection[id][prop].push(value);`enter code here`
}

after if(prop === "tracks") .

Hopefully, it helps you solve this problem.

enter code here function updateRecords(records, id, prop, value) {

if(value!==""){
if(prop==="tracks")
records[id][prop].push(value);
else
  records[id][prop] =value;
}else 
delete records[id][prop];
return records;

}
// This is my solution
function updateRecords(records, id, prop, value) {
 if(prop !== 'tracks' && value !=='')
  records[id][prop] = value;
 if(prop === 'tracks' && records[id].hasOwnProperty(prop) == false ) {
  records[id][prop]=[]; 
  records[id][prop].push(value);
  }
  else if(prop === 'tracks' && value !=='')
    records[id][prop].push(value);
  if( value === '')
   delete records[id][prop];
  return records;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM