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”]。推送(值)