2016-04-24 14 views
0

私はJavascriptを使い慣れていないので、これはおそらくかなり簡単です。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" 
    } 
}; 

そして、この機能:

私はこのJSONを持っ

// 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、 "アーティスト"、 "ABBA") ;

updateRecords(2548、 "artist"、 "");

updateRecords(1245、 "トラック"、 "愛に中毒");

updateRecords(2458、 "tracks"、 "");私がする必要がどのような

JSON情報にアクセスする関数を記述し、引数valueが非空白の場合は情報を追加します(value !== "")とprop引数がtracksではありません(props !== "tracks)値を更新したり、設定しています引数はpropです。さらに

引数propはトラック(props === "tracks")であり、引数valueも非空白の場合(value !== "")Iは、JSONファイルのtracks内側の端部に値をプッシュする必要があります。

私の質問はどうすればこのことをやり遂げることができますか?私は明らかに失敗している私はdeletepush情報が必要ですが、正しいデータにアクセスすることは私に混乱していることを理解する、私は何かのような何かをするでしょうか:return collection.id.prop.push(value);

答えて

0

ドット表記を使用して、スペースやブラケット表記がない要素にアクセスする必要があります。 「小道具」にスペースが含まれているかどうかわからないので、ここでは大括弧表記を使用することをお勧めします。

質問がある場合はお知らせください。以下のデータが与えられ

// 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"]のため、ドットの後の変数を解決しないことを意味します。

これは、idcollectionなどの所有権にアクセスしようとしていることを意味します。

代わりに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; 
} 
関連する問題