2016-09-05 13 views
0

"ABBA"の値を持つ新しい "アーティスト"フィールドをアルバムID 5439に追加するのに正しい構文が表示されないようですが、未定義の "アーティスト"のエラーが続きます。私はそれが間違っているように見える挿入物にどのような意味で関係なく、意味があります。新しい値をオブジェクトに渡す

このコードは、値がトラックと空でないかどうかをチェックし、渡された新しいプロパティ変数をvalue変数の値で追加するためのものです。私はJSONでobj.prop = "value"で追加できると思った。しかし、このdidntのはidというプロパティを持っていない

// 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(prop !== "tracks" && value !== null){ 
    collection.id[prop] = prop[value]; 
    } 


    return collection; 
} 

// Alter values below to test your code 
updateRecords(5439, "artist", "ABBA"); 

答えて

2

あなたが取得しているエラーは、次のとおりです。

VM5865:33 Uncaught TypeError: Cannot set property 'artist' of undefined

これはcollection.idundefinedであることを意味します。 collectionにはidというプロパティがないため、これは意味があります。

また、間違って設定していますvalue

置き換えます

collection.id[prop] = prop[value]; 

をして:

collection[id][prop] = value; 

collection[id]はあなたが必要とするコレクションです。 [prop]は、コレクションの"artist"プロパティをターゲットにするために使用されます。 valueは、"artist"として保存する値です。

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 (prop !== "tracks" && value !== null) { 
 
    collection[id][prop] = value; 
 
    } 
 

 
    return collection; 
 
} 
 

 
// Alter values below to test your code 
 
var result = updateRecords(5439, "artist", "ABBA"); 
 
console.log(result['5439'])

+0

これを説明するために時間を割いてありがとうは、それを本当に感謝しています。 – theHussle

0
collection.id[prop] = prop[value]; 

コレクションを働くように見えます。 idはコレクションオブジェクトのプロパティです。

collection[id][prop] = prop[value]; 
関連する問題