2016-07-27 16 views
8

Angenommen, es ist eine Aufgabe:Immutable.js einschieben Array in verschachteltes Objekt

const object = { 
    'foo': { 
    'bar': [1, 2, 3] 
    } 
} 

I 4 zu object.foo.bar Array zu drücken braucht.

Im Moment mache ich es wie folgt aus:

const initialState = Immutable.fromJS(object) 
const newState = initialState.setIn(
    ['foo', 'bar', object.foo.bar.length], 
    4 
) 
console.log(newState.toJS()) 

Aber ich weiß nicht wirklich wie es, da ich object.foo.bar.length im Pfad verwenden müssen. In meinem realen Beispiel ist das Objekt viel tiefer geschachtelt und die Länge des Arrays sieht sehr hässlich aus. Gibt es einen anderen, bequemeren Weg?

Antwort

2

Ich verwende seamless-immutable, wenn ich ein neues Element Array von verschachtelten Objekt bin Hinzufügen I habe diesen Fehler:

The push method cannot be invoked on an Immutable data structure.

Mein Array hat immer noch push Methode, aber es funktioniert nicht. Die Lösung ist verwenden concat stattdessen mehr Details zu #43:

initialState.updateIn(['foo', 'bar'], arr => arr.concat([4])); 

Hope this Hilfe!

+0

Das gleiche Problem hier, macht Sinn, da Push ändert, was mit unveränderlichen Datenstrukturen nicht möglich ist. – Lucas

Verwandte Themen