2016-08-29 1 views
3

Wie ImmutableJS verwenden, muss ich eine neue Karte durch Zuordnung über den Schlüssel/Wert-Paare einer Eingangskarte erzeugen?Wie man Schlüsselwerte in einer Karte abbildet, um eine andere Karte mit ImmutableJS zu erzeugen?

In Scala, würde ich so etwas tun:

scala> Map(1->2, 3->4).toSeq.map{case (k, v) => (k*k) -> (v*v*v)}.toMap 
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 8, 9 -> 64) 

(Dieser Fall trivialer Quadrate der Schlüssel und Würfel den Wert.)

In JavaScript, ich bin der Hoffnung, für so etwas wie:

Immutable.fromJS({1: 2, 3: 4}).map((v, k) => [k*k, v*v*v]).toJS() 
// { 1: 8, 9: 64 } 

(ich verwende ES6 via Babel.)

ich weiß, dass diese isn Aufgrund der möglichen Schlüsselkollision wird garantiert kein definiertes Ergebnis erzielt. In meiner Bewerbung verhindere ich dies anderswo.

Ich benutze eigentlich eine OrderedMap, wenn das einen Unterschied macht.

+0

Es gibt eine 'map()' Funktion verfügbar https://facebook.github.io/immutable-js/docs/#/Map/map – Ben

+1

Hallo Ben, die Funktion an Karte übergeben wird erwartet, dass ein neuer Wert zurückgegeben wird . Ich suche nach etwas, von dem erwartet wird, dass es ein neues Schlüssel/Wert-Paar erzeugt, weil ich beide ändern muss. –

+0

Guter Punkt, ich habe die Frage eindeutig nicht richtig gestellt – Ben

Antwort

2

Die Funktion, die ich gesucht habe ist mapEntries. Hier ein Beispiel:

Immutable.fromJS({1: 2, 3: 4}).mapEntries(([k, v]) => [k*k, v*v*v]).toJS() 
// { 1: 8, 9: 64 } 

mapEntries nimmt eine Funktion, die ein Schlüssel/Wert-Paar als Array nimmt, und sollte das neue Schlüssel/Wert-Paar auch als ein anderes Array zurück.

Verwandte Themen