2016-07-21 13 views
-2

Ich habe diese komplexe Anordnung von Objekten (Ich werde nur die Knoten zeigen notwendig, das Problem zu erklären):Javascript Array von Objekten nicht zu ändern

var arr = [ 
    { 
     json: { 
       doc: { 
        id: 1, 
        atualizacao:{ 
           dc: false 
        } 
       } 
     } 
    } 
] 

angular.forEach(arr, function(value, key) { 
    if(value.json.doc.id == 1){ 
     value.json.doc.atualizacao.dc = true; 
    } 
}); 

Als ich diese forEach tun, ist es, den Wert der Änderungen 'dc' Knoten des Arrays an einer bestimmten Position. aber am Ende der forEach ist das Array arr immer noch unverändert.

Ich habe viele console.logs und fand heraus, dass:

  • wenn ich die Variable log: value.json.doc.atualizacao.dc - IT ZEIGT 'true'

  • ; wenn ich die Variable log: value.json.doc.atualizacao - es erscheint 'dc = true'

  • wenn ich die Variable log: value.json.doc - IT ZEIGT ‚atualizacao.dc = true '

  • wenn ich die Variable log: value.json - es erscheint 'doc.atualizacao.dc = false'

  • wenn i log den Variablenwert - IT 'json.doc.atualizacao.dc = false'

+0

Können Sie uns einen [Plunker] (http://plnr.co/) geben, der den Fehler zeigt? Es würde sehr hilfreich sein, das Problem zu duplizieren. –

+0

Dies sollte gut funktionieren, habe es nur in der Konsole getestet (mit 'arr.forEach' anstelle von' angular.forEach') – konkked

+0

siehe [Warum ist die Verwendung von "for ... in" mit Array-Iteration eine schlechte Idee?] (Http: //stackoverflow.com/questions/500504/why-isusing-for-in-in-array-iteration-a-bad-idea) –

Antwort

0

seine wechselnden ZEIGT, werfen Sie einen Blick hier: Plunker

in angular.forEach können Sie nur passieren der Wert für die Funktion.

werfen Sie einen Blick in den oben Plunker, hoffe, es

+0

Das Unglaublichste ist, dass der Code mit Ausnahme der Parameter in der angular.forEach-Funktion identisch mit meinen ist. Aber es funktioniert immer noch nicht für mich (sogar Entfernen dieses zweiten Parameters) Hier ist ein "Screenshot" meines Codes (ein bisschen komplexer), die nicht funktionieren. [Screenshot] (http://imgur.com/a/Fs5Ip) Akademien ist die "Arr" –

0

hilft ich nicht denken fange an, dass ein Problem mit dem $ rootScope ist. In der Tat ist das Objekt viel komplexer, groß und "schwer" als die, die ich oben veröffentlicht habe. Ich denke, wenn ich den Wert auf "wahr" ändere, "wird" meine Änderung am Ende des forEach immer noch angewendet. Deshalb, wenn ich Teil des Objekts logge, zeigt es wahr, und wenn ich das Wurzelobjekt logge, wird es falsch angezeigt. Es wird zumindest Sinn machen.

Verwandte Themen