2016-04-24 57 views
0

我是JavaScript新手,所以這可能相當簡單。從JSON訪問記錄並添加或刪除信息

我有這樣的JSON:

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

function updateRecords(id, prop, value) { 
    if (value !== "" && prop !== "tracks"){ 
    return collection.id.prop.value; 
    } else if (value !== "" && prop === "tracks"){ 
    return collection.id.prop.push(value); 
    } else { 
    delete collection.id.prop.value; 
    } 

    return collection; 
} 

這是我的測試:

updateRecords(5439, 「藝術家」, 「利羣」) ;

updateRecords(2548,「artist」,「」);

updateRecords(1245,「tracks」,「addicted to love」);

updateRecords(2458,「tracks」,「」);

我需要做的是寫將訪問JSON信息,如果該參數value是非空白的信息添加(value !== "")的函數,prop的說法是不tracksprops !== "tracks)更新或設定值對於參數prop

此外如果參數prop是軌道(props === "tracks")和參數value也是非空白(value !== "")我需要的值推到tracksJSON文件的內部的端部。

我的問題是我怎麼能這樣做呢?我的顯然是失敗我明白我需要deletepush的信息,但訪問正確的數據會讓我感到困惑,我會做一些事情:return collection.id.prop.push(value);

回答

0

如果他們這樣做,您應該使用點符號來訪問沒有空格和括號表示法的元素。由於您不知道「prop」是否包含空格,因此最好使用括號表示法。

讓我知道如果您有任何問題。

鑑於以下數據:

// Setup 
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) { 
    if((value !== "") && (prop !== "tracks")) { 
    console.log("Updating or setting property: ", prop); 
    console.log("setting property to: ", value); 
    collection[id][prop] = value; 
    } 
    else if((value !== "") && (prop === "tracks")) { 
    collection[id].tracks.push(value); 
    } 
    else if(value === "") { 
    delete collection[id][prop]; 
    } 

    return collection; 
} 

updateRecords(5439, "artist", "ABBA"); 
+1

唯一代碼答案氣餒:而原來提問者可能明白了,否則將來有人一定的時間,可能需要澄清,但問題是太老了,是值得一問。 – Kroltan

+1

我明白了。補充說明他們出錯的地方。 –

+0

問題不是空間或不是,但something.prop'相當於'something [「prop」]',而不是'something [prop]'。 – Kroltan

1

小心,在你的代碼中使用collection.id.prop.value。這意味着它不會解析點後的變量,因爲a.b is equivalent to a["b"]

這意味着您正嘗試訪問 collection等專有權。

你應該改用collections[id][prop].value

var collectionCopy = JSON.parse(JSON.stringify(collection)); 

function updateRecords(id, prop, value) { 
    if (value !== "" && prop !== "tracks"){ 
    return collection[id][prop].value; 
    } else if (value !== "" && prop === "tracks"){ 
    return collection[id][prop].push(value); 
    } else { 
    delete collection[id][prop].value; 
    } 

    return collection; 
}