JavaScript对象值通过IF语句更新
我对IF语句更新JavaScript对象值通过IF语句更新,javascript,json,jsobject,Javascript,Json,Jsobject,我对IF语句更新JavaScript对象值有问题。它在代码中间显示错误。请建议。如果你需要更多的信息,请在底部查看更多关于该项目的信息 var collection = { "2548": { "album": "Slippery When Wet", "artist": "Bon Jovi", "tracks": [ "Let It Rock", "You Give Love a Bad Name"
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”,但相册没有“tracks”属性,请在将新值添加到相册的相应属性之前创建一个空数组
如果道具为“曲目”且值不为空(“”),请将该值推送到唱片集现有曲目数组的末尾
如果值为空(“”),请从相册中删除给定的道具属性
提示:
在使用变量访问对象属性时使用括号表示法
Push是一种可以在Mozilla开发者网络上阅读的数组方法
您可以参考引入JavaScript对象表示法(JSON)的操作复杂对象来复习。这个如何
// 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
所以你想让我们帮你做作业吗?你试过调试你的代码吗?大多数浏览器都有开发人员模式,允许您非常轻松地检查和逐步完成代码。你试过什么?另外,请参见。告诉我们你想做什么,展示你的想法,展示你得到的结果,包括错误和结果。