2016-06-22 8 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"); 

Dies ist der ursprüngliche Code, der einen Fehler zurückgibt. Dies ist ein bearbeitetes und bitte ignorieren Sie diese Frage danke. Der Versuch, den Fehler zu beheben, der Push sagt, ist undefinierte Funktion. Sie können keinen Wert für Array-Objekt, wenn Undefined, so dass ich dieSo legen Sie einen Array-Wert in ein verschachteltes Array ein

Sammlung [ID] [prop] = []; // mein Problem lösen

zu vermeiden Fehler immer sagen, Druck auf diese Codezeile nicht definiert ist ....

Sammlung [id] [Prop] .push (Wert);

+0

'Sammlung [ "5439"] [ "Titel"] = [ 'Etwas']'? – potashin

+1

Auch das ist nicht verschachtelte Arrays, es ist ein Objekt. –

+0

Das ist das Problem = "Wenn prop den Schlüssel" tracks "enthält und sein Wert nicht leer ist, dann drücke den Wert auf das Ende des vorhandenen Tracks-Arrays." –

Antwort

3

Versuchen folgende

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

Sie haben ein Objekt collection und um den Zugriff auf/aktualisieren Sie das Objekt entweder . oder [] Notationen verwenden können. Um die Notation . zu verwenden, muss der Schlüssel ein gültiger Bezeichner sein. Der Nummernbezeichner "5439" ist kein gültiger Bezeichner und gibt einen SyntaxError. Der sichere Weg, dies zu tun, ist mit der [] Notation wie folgt:

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

Danke Leute, mein Problem wurde gelöst, Das ist etwas mit push() Funktion zu tun ist undefiniert. Sie können push() nicht für undefiniertes Array verwenden –

+0

Original Task = "Wenn Prop den Schlüssel" tracks "enthält und sein Wert nicht leer ist, dann schieben Sie den Wert auf das Ende des vorhandenen Tracks-Arrays." –