FreeCodeCamp:我被困在“Record Collection”上

时间:2016-08-15 11:23:48

标签: javascript json

我正在做Freecodecamp教程,但我遇到了here。写了下面的代码,但钢不起作用:

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;
}

请有人帮助我!!!

4 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。以下解决方案应该有效。我在一行中添加了单独的if语句,以便更容易理解。如果您需要任何澄清,请与我们联系。

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;
}

另外,以下是对此问题的描述:

==========

您将获得一个JSON对象,表示您的音乐专辑集合的一部分。每张专辑都有几个属性和一个唯一的ID号作为其关键。并非所有专辑都有完整的信息。

编写一个功能,其中包含专辑的ID(如2548),属性道具(如"艺术家"或"曲目")和一个值(如& #34;沉迷于爱情")修改此集合中的数据。

如果道具不是"跟踪"并且值不为空(""),更新或设置该记录专辑的属性值。

您的函数必须始终返回整个集合对象。

处理不完整数据有几条规则:

如果道具是"追踪"但这张专辑并没有“跟踪”#34; property,在将新值添加到相册的相应属性之前创建一个空数组。

如果道具是"追踪"并且值不空(""),将值推到专辑现有曲目阵列的末尾。

如果值为空(""),请从相册中删除给定的prop属性。

===========

答案 1 :(得分:2)

如果您使用所有if语句执行该函数,那么它将同时运行。

这里是:

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;
}

答案 2 :(得分:1)

这是我的答案:

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
}

答案 3 :(得分:0)

你坚持:

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". 

我认为你应该补充:

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

希望它可以帮助您解决这个问题。