挑战是Freecodecamp的“基本JavaScript:记录收集”。挑战在于更新JSON格式的Record Collection。

这是我编写的代码:



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


  return collection;
}

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





它满足所有要求,但一项要求除外:


  在updateRecords(5439,“ tracks”,“ Take a Chance on Me”)之后,音轨
  最后一个元素应该是“以我为生”。


当我检查控制台时,我得到了以下语句


  无法读取未定义的属性“ push”


似乎代码认为push(应该是一个函数)实际上是一个对象属性。

我如何解决它?

如果您想详细了解有关此挑战的更多信息,请访问以下链接:
https://guide.freecodecamp.org/certifications/javascript-algorithms-and-data-structures/basic-javascript/record-collection/

最佳答案

当前,您的代码将永远不会达到else if (prop === "tracks")条件。如果prop === "tracks",它将进入prop === "tracks" && value !== ""条件,并尝试将value推入tracks数组。如果tracksid数组不存在(例如5439),它将引发错误。因此,您可以按以下方式更改条件

检查属性是否为tracks。在此if条件内,检查collection[id][prop]是否具有值。如果是,请将其推入阵列。否则,添加一个像这样的新数组[value]

function updateRecords(id, prop, value) {
  if (prop === "tracks" && value !== "") {

    // check if tracks exists
    if (collection[id][prop])
      collection[id][prop].push(value)
    else
      collection[id][prop] = [value]; // create a new array

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

  return collection;
}


这是一个工作片段:



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 (prop === "tracks" && value !== "") {

    if(collection[id][prop])
      collection[id][prop].push(value)
    else
      collection[id][prop] = [value]

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

  return collection;
}

// Alter values below to test your code
updateRecords(5439, "artist", "ABBA");
updateRecords(5439, "tracks", "Take a Chance on Me");

console.log(collection[5439])

10-08 07:02