Wie transformiere ich eine Liste von Karten in eine Karte von Karten in immutable.js?
Angenommen ich habe ein immutable.js List
wie diese:
var xs = Immutable.fromJS([{key: "k", text: "foo"}])
Ich will zu transformieren, die in einer Karte, die so aussieht:
var ys = Immutable.fromJS({k: {key: "k", text: "foo"}})
Wie schalte ich xs
in ys
idiomatically in immutable.js?
Durch idiomatically ich meine, dass eine zwischengeschaltete Strukturen sollten immutable.js Strukturen, und ich denke, dass alle Zwischenschritte verwenden würde durchsuchbar Zusammensetzung anstatt full-size-intermediate representations.
Bearbeiten: ich habe eine jsperf-benchmark vergleicht man die Antworten so weit. Sowohl nicht-mutierenden Lösungen fühlen sich ziemlich idiomatisch zu mir, ich kann halten Sie aus und lassen Stimmen entscheiden, die gewählte Antwort oder halten, bis wir uns sammeln können, eine Sammlung von etwa ebenso idiomatische Techniken.
InformationsquelleAutor der Frage CJ Gaconnet | 2015-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie reduzieren die Liste der Eingänge in neue Unveränderlich.Karte:
Gibt es keine zwischendarstellung in diesem Fall, aber die unveränderliche Karte muss aktualisiert werden (in der Tat, neue Instanz erstellt werden muss) in jeder iteration und dass suboptimale (abhängig von der tatsächlichen Umsetzung des Unwandelbaren.Anzeigen).
Optimieren Sie es zu reduzieren in regelmäßigen javascript-Objekt und konvertieren es zu unveränderlich Karte am Ende:
Aber das ist sicherlich weniger idiomatisch.
InformationsquelleAutor der Antwort dkl
Eine Lösung kann die Verwendung von Map constructor aus der Liste:
InformationsquelleAutor der Antwort Julien Deniau
Scheint, wie dieses, aber ich bin mir nicht sicher über eine zwischendarstellung
PS Es ist seltsam, aber ich bin nur verwenden können .toKeyedSeq, nicht .toKeyedIterable, die ist besser geeignet.
InformationsquelleAutor der Antwort mbeloshitsky
Können Sie tauschen eine Liste der Karten, um eine Karte von Listen mithilfe von
reduce
kombiniert mitmergeWith
.Reduzieren durch die Sammlung und Zusammenführung jedes neue Element, durch die Verkettung seiner Werte zusammen.
InformationsquelleAutor der Antwort Allan Hortle