FreeCodeCamp JSON 代码不起作用

FreeCodeCamp JSON code isn't working

本文关键字:不起作用 代码 JSON FreeCodeCamp      更新时间:2023-09-26

>说明:

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

有效的代码:

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;
}