【问题标题】:JavaScript Objects values updates by IF StatementsJavaScript 对象值由 IF 语句更新
【发布时间】:2018-07-20 02:46:38
【问题描述】:

我对 IF 语句更新 JavaScript 对象值有疑问。它在代码中间显示错误。请建议。如果您需要更多信息,请查看底部以获取有关该项目的更多信息。

​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) {
  var collection;
    if (prop != "tracks" && value.length != 0) {
        collection[id][prop] = value;}
    else if(prop === "tracks" && collection[id].hasOwnProperty(tracks) === false){
        collection[id].prop = [];}
    else if(prop === "tracks" && value != ""){
        collection[id][prop].push(value);}
    else if (value ===""){
        delete collection[id][prop];}
​
    return collection;
};

您将获得一个 JSON 对象,该对象代表您的音乐专辑收藏的一部分。每个专辑都有几个属性和一个唯一的 ID 号作为其键。并非所有专辑都有完整的信息。

编写一个函数,它接受专辑的 id(如 2548)、属性道具(如“艺术家”或“曲目”)和值(如“爱上瘾”)来修改此集合中的数据。

如果 prop 不是“tracks”且 value 不为空 (“”),请更新或设置该唱片专辑属性的值。

您的函数必须始终返回整个集合对象。

处理不完整数据有几个规则:

如果 prop 是“tracks”但专辑没有“tracks”属性,则在将新值添加到专辑的相应属性之前创建一个空数组。

如果 prop 为 "tracks" 且 value 不为空 (""),则将 value 推送到专辑现有曲目数组的末尾。

如果 value 为空 (""),则从相册中删除给定的 prop 属性。

提示:

使用变量访问对象属性时使用括号表示法。

Push 是一种数组方法,您可以在 Mozilla Developer Network 上阅读。

您可以参考操作复杂对象介绍 JavaScript 对象表示法 (JSON) 进行复习。

【问题讨论】:

  • 那么...您希望我们为您做作业吗?你试过调试你的代码吗?大多数浏览器都有一个开发者模式,允许你很容易地检查和单步执行代码。你试过什么?另请参阅How to Ask。告诉我们您想做什么,显示您的minimal reproducible example,并显示您得到的结果,包括错误和结果。

标签: javascript json jsobject


【解决方案1】:

这个怎么样?

// Only change code below this line
function updateRecords(id, prop, value) { 
    //var collection; 【Modified 1】I think it's unnecessary. this time I use Global Variable.
    if (prop != "tracks" && value.length != 0) {
        collection[id][prop] = value;}
        // 【Modified 2】 hasOwnProperty(tracks) → hasOwnProperty("tracks")
        // 【Modified 3】 add the condition 'value != ""', just in case.
    else if(prop === "tracks" && collection[id].hasOwnProperty("tracks") === false && value != ""){
        // 【Modified 4】collection[id].prop → collection[id].tracks or collection[id][prop]
        // 【Modified 5】[] → [value]. You need a value as well as initialize, right?
        collection[id].tracks = [value];}
    else if(prop === "tracks" && value != ""){
        collection[id].tracks.push(value);}
        // 【Modified 6】It's okay to keep it, but if it doesn't have a property, there's no reason to run delete.
    else if (value ==="" && collection[id].hasOwnProperty("tracks")){
        delete collection[id][prop];}
    //return collection;
};

另外,我不确定你的问题,因为这个问题有点缺乏信息。
我们确实需要一个问题,在这种情况下,是这样的:

// call
updateRecords("1245", "tracks", "test");
// Getting Error
// Uncaught ReferenceError: tracks is not defined

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多