Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FreeCodeCamp JSON代码不是';行不通_Javascript_Json - Fatal编程技术网

Javascript FreeCodeCamp JSON代码不是';行不通

Javascript FreeCodeCamp JSON代码不是';行不通,javascript,json,Javascript,Json,说明: 编写一个接受id、属性(prop)和值的函数。 对于集合中的给定id:如果值为非空(值!=“”) 道具不是“轨迹”,然后更新或设置道具的值。如果 道具为“轨迹”且值为非空,将值推到 轨迹数组的末尾。如果该值为空,则删除该道具。总是 返回整个集合对象 正在工作的代码: function update(id, prop, value) { if (prop === "tracks" && value !== "") { collection[id][p

说明:

编写一个接受id、属性(prop)和值的函数。 对于集合中的给定id:如果值为非空(值!=“”) 道具不是“轨迹”,然后更新或设置道具的值。如果 道具为“轨迹”且值为非空,将值推到 轨迹数组的末尾。如果该值为空,则删除该道具。总是 返回整个集合对象

正在工作的代码:

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当前位置没有看上去那么难。你会比你想象的更快到达那里。