Javascript 无法理解此更新功能的流程
好的,我有一个记录收集对象:Javascript 无法理解此更新功能的流程,javascript,function,object,if-statement,Javascript,Function,Object,If Statement,好的,我有一个记录收集对象: var collection = { "2548": { "album": "Slippery When Wet", "artist": "Bon Jovi", "tracks": [ "Let It Rock", "You Give Love a Bad Name" ] }, "2468": { "album": "1999", "
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"
}
};
代码已更新,具有以下功能:
function updateRecords(id, prop, value){
if (prop === "tracks" && value !== "") {
if(collection[id][prop]) {
collection[id][prop].push(value);
}
else {
collection[id][prop]=[value];
}
} else if (value !== "") {
collection[id][prop] = value;
} else {
delete collection[id][prop];
}
return collection;
}
我想澄清一下上面的代码片段是如何工作的。我读起来像是:
if (prop === "tracks" && value !== "") {
if(collection[id][prop]) {
collection[id][prop].push(value);
}
如果“prop”等于曲目,且值不为空,则进入函数的更新部分。下一部分,我不确定,似乎是这样说的“如果集合的id和道具有值,将所述id和道具推送到集合中
下一部分我肯定有点迷路了:
else {
collection[id][prop]=[value];
}
从上面开始,我不清楚else语句的目的是否仅仅是验证该信息是否已经包含在数组中
else if (value !== "") {
collection[id][prop] = value;
} else {
delete collection[id][prop];
}
最后,上面的测试似乎只是测试值是否为空,如果不是,则将所述值插入数组。如果所有条件都失败,则不会将id和属性添加到数组中。我不觉得我在这方面有什么进展,但如果有人能帮助澄清一些困惑,我将不胜感激 首先,我解释一下这是如何工作的:
collection[id][prop]
您有这样一个对象:
var collection = {
"ID_1": {
"PROPERTY_A": "AAA"
}
}
要访问集合中属性ID\u 1
下对象的属性A
内部
您可以这样做:
collection[“ID\u 1”][“PROPERTY\u A”]/->“AAA”
也可以这样设置值
collection[“ID_1”][“PROPERTY_A”]=“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
好的,让我们检查代码:
// if the prop is "tracks", it should be an array, there are many tracks...
// so it should be handled like an array
if (prop === "tracks" && value !== "") {
// does "tracks" exists for this item?
if(collection[id][prop]) {
// yes.. then push it into the array
collection[id][prop].push(value);
} else {
// otherwise, (when "tracks" does not exist)
// create the array and put the value as first item
collection[id][prop] = [value];
}
上述代码可以简化为:
// so it should be handled like an array
if (prop === "tracks" && value !== "") {
// set it to the same value, if the value is not falsey (null, 0, undefined) or make it to an array..
collection[id][prop] = collection[id][prop] || [];
// push the value to it
collection[id][prop].push(value)
下一件事:
// prop is not "tracks", but could be an empty string "", check it
else if (value !== "") {
// Ok, the value is not an empty string
// set the value to the prop
collection[id][prop] = value;
} else {
// If this is an empty string == "", then delete this property
delete collection[id][prop];
}
试着理解它,这是最基本的,如果你有一个特殊的问题,请尽可能准确地回答。这很有意义,只是一个简单的问题。代码的[id][prop]=值部分,它们正在对数组的各个级别应用测试,对吗?例如,id=2468,prop=“album”,“artist”,“tracks”,这个值是我们应用于所述属性的值吗@webdebyes,但是当[id][“tracks”]
是一个数组时,您应该执行[id][“tracks”]。推送(值)