我正在为编码类挑战,出于某种原因,我的代码无效。我得到了以下内容:
updateRecords(5439, "tracks", "Take a Chance on Me");
我原本应该完成以下任务:
我的代码只满足第一和第四个要求。运行updateRecords(2548, "tracks", "");
或TypeError: Cannot read property 'push' of undefined
时,我会获得updateRecords(2548, "artist", "");
。当我运行TypeError: Cannor convert undefined or null to object
时,我得到// Only change code below this line
function updateRecords(id, prop, value) {
if (value !== "" && prop !== "tracks"){
collection[id][prop] = value;
}
else if (value !== "" && prop == "tracks"){
var currentAlbumTracks = collection[id].tracks;
currentAlbumTracks.push(value);
}
else if (value === ""){
delete collection.id.prop;
}
return collection;
}
。
我的代码如下所示:
function updateRecords(id, prop, value) {
var currentAlbumTracks = collection[id].tracks;
if (value !== "") {
if (prop !== "tracks"){
collection[id][prop] = value;
}
else if (prop == "tracks"){
if (currentAlbumTracks) {
currentAlbumTracks.push(value);
}
else if (currentAlbumTracks === ""){
collection[id].tracks = [value];
}
}
}
return collection;
}
知道发生了什么事吗?
编辑: 我已经改变了我的代码。现在我有:
fileB
答案 0 :(得分:0)
您发布了两个错误。
此错误来自您尝试在push
上致电collection[id].tracks
。如果尚未在tracks
记录中设置collection[id]
属性,则该属性尚不是Array
,因此没有push
方法。在尝试Array
之前,您必须检查push
是否存在,或者您可以为每条记录预先为Array
属性预分配tracks
。< / p>
第二个错误可能是在引用属性时从括号表示法切换到点表示法的结果;您引用collection.id.prop
,而在之前的所有情况下,您都引用collection[id][prop]
。
答案 1 :(得分:0)
行TypeError: Cannot read property 'push' of undefined
中的错误currentAlbumTracks.push(value);
表示currentAlbumTracks
未定义。你需要防范这种可能性:
var currentAlbumTracks = collection[id].tracks;
if (currentAlbumTracks) {
currentAlbumTracks.push(value);
}
行TypeError: Cannor convert undefined or null to object
中的错误delete collection.id.prop;
显示了类似的问题。您正试图访问名为&#39; prop&#39;在任何元素中都不存在。所以你想要括号表示法。
if (collection.id[prop]) {
delete collection.id[prop];
}
答案 2 :(得分:0)
我们在这里有两个错误。
collection[id].tracks
为undefined
,所以在推送值之前,您需要定义它,所以
var currentAlbumTracks = collection[id].tracks;
currentAlbumTracks.push(value);
成了
collection[id].tracks = collection[id].tracks || []; //Take existing or create new
collection[id].tracks.push(value);
您的点符号不正确,更多信息here
所以
delete collection.id.prop;
变为
delete collection[id][prop];
总体而言包括所有整改,我们可以做出以下功能
function updateRecords(id, prop, value) {
if (value !== "" && prop !== "tracks"){
collection[id][prop] = value;
}
else if (value !== "" && prop == "tracks"){
collection[id].tracks = collection[id].tracks || [];
collection[id].tracks.push(value);
}
else if (value === ""){
delete collection[id][prop];
}
return collection;
}