挑战是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/
答案 0 :(得分:2)
当前,您的代码将永远不会达到else if (prop === "tracks")
条件。如果为prop === "tracks"
,它将进入prop === "tracks" && value !== ""
条件,并尝试将value
推入tracks
数组。如果tracks
的{{1}}数组不存在(例如5439),它将引发错误。因此,您可以按以下方式更改条件
检查属性是否为id
。在此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;
}