Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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代码是否向对象添加了新属性?_Javascript - Fatal编程技术网

为什么不是';我的Javascript代码是否向对象添加了新属性?

为什么不是';我的Javascript代码是否向对象添加了新属性?,javascript,Javascript,我正在学习Javascript的freeCodeCamp教程,并一直在学习记录收集任务。我正在尝试以不同的方式编写它,但尽管查看了过去的教程并在线搜索,我还是不明白为什么我的代码没有将属性“artist”附加到5439对象 var collection = { "2548": { "album": "Slippery When Wet", "artist": "Bon Jovi", "tracks": [ "Let It Rock",

我正在学习Javascript的freeCodeCamp教程,并一直在学习记录收集任务。我正在尝试以不同的方式编写它,但尽管查看了过去的教程并在线搜索,我还是不明白为什么我的代码没有将属性“artist”附加到5439对象

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

// Alter values below to test your code
console.log(updateRecords(5439, "artist", "ABBA"));
我已经浏览了在线教程,看起来我包括它正确。我也尝试过括号表示法,但没有任何效果,但当我调试代码并打印结果时,没有添加任何内容。我根本就没有访问对象吗?

当使用变量动态访问对象
集合中的属性时,需要使用。当您在
循环中为…使用
时,您的
i
变量引用对象中的关键点,因此它不会具有诸如
.tracks
等属性。。。(这意味着像
i.tracks.push(value)
这样的代码不起作用),您需要使用
collection[i]
获取存储在
i
键的对象的引用:

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]
},
"1245": {
“艺术家”:“罗伯特·帕默”,
“轨道”:[]
},
"5439": {
“专辑”:“阿巴黄金”
}
};
//保留集合的副本以供测试
var collectionCopy=JSON.parse(JSON.stringify(collection));
//仅更改此行下方的代码
函数更新记录(id、属性、值){
for(集合中的变量i){
如果(i==id){
如果(值==“”){
删除集合[i][prop];
}
否则如果(道具==“轨迹”&&value!==“”){
if(collections.hasOwnProperty(“tracks”)){
集合[i]。跟踪。推送(值);
}
否则{
集合[i]。轨迹=值;
}
}
否则{
集合[i][prop]=价值;
}
}
}
回收;
}
//更改下面的值以测试代码
日志(更新记录(5439,“艺术家”、“阿巴”)使用变量动态访问对象
集合中的属性时需要使用。当您在
循环中为…使用
时,您的
i
变量引用对象中的关键点,因此它不会具有诸如
.tracks
等属性。。。(这意味着像
i.tracks.push(value)
这样的代码不起作用),您需要使用
collection[i]
获取存储在
i
键的对象的引用:

var集合={
"2548": {
“专辑”:“湿滑”,
“艺术家”:“Bon Jovi”,
“轨道”:[
“让它摇滚”,
“你给了爱一个坏名声”
]
},
"2468": {
“专辑”:“1999”,
“艺术家”:“王子”,
“轨道”:[
"1999", 
“小红克尔维特”
]
},
"1245": {
“艺术家”:“罗伯特·帕默”,
“轨道”:[]
},
"5439": {
“专辑”:“阿巴黄金”
}
};
//保留集合的副本以供测试
var collectionCopy=JSON.parse(JSON.stringify(collection));
//仅更改此行下方的代码
函数更新记录(id、属性、值){
for(集合中的变量i){
如果(i==id){
如果(值==“”){
删除集合[i][prop];
}
否则如果(道具==“轨迹”&&value!==“”){
if(collections.hasOwnProperty(“tracks”)){
集合[i]。跟踪。推送(值);
}
否则{
集合[i]。轨迹=值;
}
}
否则{
集合[i][prop]=价值;
}
}
}
回收;
}
//更改下面的值以测试代码

日志(更新记录(5439,“艺术家”、“阿巴”)您只需执行以下操作:

  • 使用括号符号
  • 使用集合[i][
    属性名称
    ]而不仅仅是i[
    属性名称
    ]
  • 首次添加轨迹时,请将其添加为带有
  • var集合={
    "2548": {
    “专辑”:“湿滑”,
    “艺术家”:“Bon Jovi”,
    “轨道”:[
    “让它摇滚”,
    “你给了爱一个坏名声”
    ]
    },
    "2468": {
    “专辑”:“1999”,
    “艺术家”:“王子”,
    “轨道”:[
    "1999", 
    “小红克尔维特”
    ]
    },
    "1245": {
    “艺术家”:“罗伯特·帕默”,
    “轨道”:[]
    },
    "5439": {
    “专辑”:“阿巴黄金”
    }
    };
    //保留集合的副本以供测试
    var collectionCopy=JSON.parse(JSON.stringify(collection));
    //仅更改此行下方的代码
    函数更新记录(id、属性、值){
    for(集合中的变量i){
    如果(i==id){
    如果(值==“”){
    删除集合[i][prop];
    }
    否则如果(道具==“轨迹”&&value!==“”){
    if(集合[i].hasOwnProperty(“轨道”)){
    集合[i][“轨道”]。推送(值);
    }
    否则{
    集合[i][“曲目”]=[值];
    }
    }
    否则{
    集合[i][prop]=价值;
    }
    }
    }
    回收;
    }
    //更改下面的值以测试代码
    日志(更新记录(5439,“艺术家”、“阿巴”);
    日志(更新记录(5439,“艺术家”和“);
    日志(更新记录(5439,“跟踪”,“sa”);
    
    日志(更新记录(5439,“跟踪”,“重新”)您只需执行以下操作:

  • 使用括号符号
  • 使用集合[i][
    属性名称
    ]而不仅仅是i[
    属性名称
    ]
  • 首次添加轨迹时,请将其添加为带有
  • <
    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) {
      for (var i in collection){
       if (i == id){
          if (value == ""){
            delete collection[i][prop];
          }
          else if (prop == "tracks" && value !== ""){
            if (collection.hasOwnProperty("tracks")){
              collection[i].tracks.push(value);
            }
            else {
              collection[i].tracks = value;
            }
          }
          else {
            collection[i][prop] = value;
          }
        }
      }
      return collection;
    }
    
    // Alter values below to test your code
    console.log(updateRecords(5439, "artist", "ABBA"));