2016-06-22 6 views
0
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" 
    } 
}; 

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

function updateRecords(id, prop, value) { 
    if (!value) delete collection[id][prop]; 
    if (!!value && prop === 'tracks'){ 

    collection[id][prop] = []; // Solve my problem 

    collection[id][prop].push(value); 
    } 
    if (!!value && prop === 'artist') collection[id][prop] = value; 
    return collection; 
} 

updateRecords(5439, "tracks", "Take a Chance on Me"); 

これはエラーを返す元のコードです。これは編集されており、この質問を無視してください。 pushが未定義の関数であるとエラーを修正しようとしています。 Undefinedの場合、配列オブジェクトの値をプッシュすることはできません。ネストした配列に配列値を入れる方法

collection [id] [prop] = []; //プッシュは、このコード行で定義されていないというエラーを避けるために私の問題

を解決....

コレクション[ID] [小道具] .push(値);

+0

'コレクション[ "5439"] [ "トラック"] = [ '何か']'? – potashin

+1

また、これはネストされた配列でもオブジェクトでもありません。 –

+0

これは問題です= "プロップにキー"トラック "が含まれていてその値が空白でない場合、その値を既存のトラック配列の最後にプッシュします。 –

答えて

3

は、あなたがオブジェクトcollectionを持っており、アクセスするために/あなたが.[]のいずれかの表記を使用することができますオブジェクトを更新

collection["5439"].tracks = ["some info", "some more info"]; 
0

を以下試してみてください。 .表記を使用するには、キーが有効な識別子である必要があります。番号識別子「5439」は有効な識別子ではなく、SyntaxErrorとなります。これを行うための安全な方法は、以下のように[]表記を使用している:

collection["5439"]["tracks"] = [1, 2, 3, "a", "b"]; 
+0

ありがとう、私の問題は解決されました、これはpush()関数とは何かが定義されていません。未定義の配列にpush()を使用することはできません –

+0

Original Task = "propにキー"トラック "が含まれていてその値が空白でない場合、その値を既存のトラック配列の最後に押します。 –

関連する問題