2017-02-13 3 views
1

Ich habe einen etwas komplexen Zustand wie folgt:ImmutableJS: Upating ein Objekt in einem Array von Arrays

array: 
    array: 
    object, 
    object, 
    etc... 
    array: 
    etc... 

Einfach ausgedrückt, eine Anordnung einer Anzahl von Arrays enthält, die Objekte zu halten. Ich versuche, eines dieser Objekte in diesem Chaos nach seiner Id zu finden und zu aktualisieren (nämlich einen abgeschlossenen Wert auf true zu setzen), konnte es aber bisher nicht. Mit Mudash gelang es mir, dieses Objekt zu finden, aber ich habe keine Ahnung, wie es wieder darauf verzichten darauf zurück, mein Code ist wie folgt:

return state.update('data', (arr) => { 
    _.forEach(arr, function(item) { 
     _.forEach(item, function(elt) { 
     if(elt.Id == action.Id) { 
      console.log('Item Found'); 
      elt.set('completed', true); 
     } 

     }); 
    }); 
    return arr; 
    }); 

Gibt es eine einfache Möglichkeit, dies zu erreichen? Danke.

Antwort

1

Der Schlüssel hier ist, dass Sie nicht Werte anstelle mutieren können. Stattdessen haben Sie das Problem, indem Sie darüber nachdenken, wie Sie jeden übergeordneten Wert in der tief verschachtelten Datenstruktur ändern.

Eine einfache Nutzung der _.map Methode den Trick ...

const _ = require('mudash') 

return _.update(state, 'data', (arr) => { 
    return _.map(arr, function(item) { 
    return _.map(item, function(elt) { 
     if(_.get(elt, 'Id') == action.Id) { 
     console.log('Item Found'); 
     return _.set(elt, 'completed', true); 
     } 
     return elt; 
    }); 
    }); 
}); 
+1

Dies ist eine elegante Lösung. Vielen Dank :) – Unforgiven

1

Wenn Sie fragen, wie Sie einen Teil eines unveränderlichen Objekts mutieren können, gibt es keine Antwort, die Sie befriedigen wird. Sehen Sie diese Antwort für viel mehr Details:

Verwandte Themen