Javascript FreeCodeCamp JSON代码不是';行不通
说明: 编写一个接受id、属性(prop)和值的函数。 对于集合中的给定id:如果值为非空(值!=“”) 道具不是“轨迹”,然后更新或设置道具的值。如果 道具为“轨迹”且值为非空,将值推到 轨迹数组的末尾。如果该值为空,则删除该道具。总是 返回整个集合对象 正在工作的代码:Javascript FreeCodeCamp JSON代码不是';行不通,javascript,json,Javascript,Json,说明: 编写一个接受id、属性(prop)和值的函数。 对于集合中的给定id:如果值为非空(值!=“”) 道具不是“轨迹”,然后更新或设置道具的值。如果 道具为“轨迹”且值为非空,将值推到 轨迹数组的末尾。如果该值为空,则删除该道具。总是 返回整个集合对象 正在工作的代码: function update(id, prop, value) { if (prop === "tracks" && value !== "") { collection[id][p
function update(id, prop, value) {
if (prop === "tracks" && value !== "") {
collection[id][prop].push(value);
} else if (value !== "") {
collection[id][prop] = value;
} else {
delete collection[id][prop];
}
return collection;
}
我的代码不起作用:
function update(id, prop, value) {
if (value !== "" && prop !== "tracks") {
collection[id][prop] = value;
} else if (value !== "" && prop === "tracks") {
collection[id][prop].push(value);
} else if(value === "") {
delete collection[id][prop];
} else {
return collection;
}
}
整个代码:
// Setup
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 update(id, prop, value) {
if (prop === "tracks" && value !== "") {
collection[id][prop].push(value);
} else if (value !== ""){
collection[id][prop] = value;
} else {
delete collection[id][prop];
}
return collection;
}
// Alter values below to test your code
update(5439, "artist", "ABBA");
我遵守了所有的指示。但是为什么我的代码不起作用呢?为什么另一个在工作?说明书上说: 始终返回整个集合对象 但是,只有在其他语句都不正确的情况下才返回它。。。这永远不会 所以,你需要改变
function update(id, prop, value) {
if (value !== "" && prop !== "tracks") {
collection[id][prop] = value;
} else if (value !== "" && prop === "tracks") {
collection[id][prop].push(value);
} else if(value === "") {
delete collection[id][prop];
} else {
return collection;
}
}
。。。进入
function update(id, prop, value) {
if (value !== "" && prop !== "tracks") {
collection[id][prop] = value;
} else if (value !== "" && prop === "tracks") {
collection[id][prop].push(value);
} else if(value === "") {
delete collection[id][prop];
}
return collection;
}
注 实现完全相同效果的更好方法是:
function update(id, prop, value) {
if (value === "") {
delete collection[id][prop];
} else if (prop === "tracks") {
collection[id][prop].push(value);
} else {
collection[id][prop] = value;
}
return collection;
}
我也有同样的问题,我创建了一个带有空数组的属性,然后使用.push()来追加该值。瞧。下面是我的代码:
function updateRecords(id, prop, value) {
if (prop !== "tracks" && value !== "") {
collection[id][prop] = value;
} else if (prop === "tracks" && value !== "") {
if(!collection[id].hasOwnProperty(prop)) {
collection[id][prop] = []; //Create a property with empty array
collection[id][prop].push(value); //Append a value into the array
} else {
collection[id][prop].push(value); //Append a value into the exist property array
}
} else if (value === "") {
delete collection[id][prop];
}
return collection;
}
“我遵循了所有的说明”–不,你没有–你在最后一部分失败:“始终返回整个集合对象。”否则{return collection;}…我想,我做到了@在哪些情况下,该分支机构实际到达?用这两个变量的所有四种可能的组合(如果有必要的话,请在纸上)进行播放除此之外,还将收集的物品按。首先,要求返回它实际上没有多大意义——集合没有传递给函数(您的或上面提到的工作示例),而是在更高的范围内定义的——因此返回它在这里实际上没有多大意义。@Anontu:代码的其余部分看起来确实(1)匹配说明中提到的条件,并且(2)在我运行Fiddle()代码时确实产生了预期的结果。但是,您仍然可以添加一些优化。请看我答案底部的注释。哇……这就是好的编码。天知道我要多久才能达到那个水平。。。多谢各位@约翰Slegers@Anontu当前位置没有看上去那么难。你会比你想象的更快到达那里。