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