2016-07-15 51 views
2

好吧,我有一個記錄集對象:唔明此更新功能的流動

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); 
    } 

如果「託」等於軌道和值不爲空,繼續到功能的更新部分。下一部分,我不確定,似乎說'如果集合的ID和道具有價值,把所述ID和道具推入集合。

接下來的部分,我肯定就有點迷失:

else { 
    collection[id][prop]=[value]; 
    } 

與上面開始,我還不清楚,如果這個else語句的目的是隻覈實信息是否已經包含在陣列。

else if (value !== "") { 
    collection[id][prop] = value; 
    } else { 
    delete collection[id][prop]; 
    } 

最後,上面似乎測試只是值是空白的,如果不是,它會插入所述值到數組中。如果所有條件都失敗,則id和prop不會添加到數組中。我覺得我沒有辦法解決這個問題,但是如果有人能夠幫助澄清一些混淆,那將不勝感激。

回答

0

首先我解釋一下,這是如何工作:

collection[id][prop]

你有一個這樣的對象:

var collection = { 
    "ID_1": { 
    "PROPERTY_A": "AAA" 
    } 
} 

訪問哪些是物業ID_1collectionPROPERTY_A內的對象您可以做到這一點:

collection["ID_1"]["PROPERTY_A"] // -> "AAA"

,你也可以設定值,這樣

collection["ID_1"]["PROPERTY_A"] = "AAAAAAAAAAAAAAA"

OK,讓我們檢查代碼:

// 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]; 
} 

嘗試去了解它,這是非常基礎,如果你有一個特殊問題,請讓它儘可能精確。

+0

這很有道理,只是一個簡單的問題。代碼中的[id] [prop] = value部分,這些部分是將測試應用到陣列的各個層次上嗎?例如,ID = 2468,道具=「專輯」,「藝術家」,「曲目」,價值是我們正在申請的所有權? @webdeb – AnabolicHippo

+0

是的,但是當[[id] [「tracks」]是一個數組時,你應該做'[id] [「tracks」]。push(value) – webdeb