2016-08-29 2 views
3

ImmutableJSを使用すると、入力マップのキー/値のペアをマッピングすることによって新しいマップを作成できますか? ScalaでImmutableJSを使用して別のマップを作成するためにマップ内のキー値をマップする方法はありますか?

、私はこのようなものだろう:(この場合は、自明の正方形のキーと値をキューブ)

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) 

JavaScriptでは、私のような何かを望んでいる:

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

(私はES6 via Babelを使用しています。)

私は、このISNを実現潜在的なキーの衝突のために、定義された結果を生成することが保証されていません。私のアプリケーションでは、他の場所でこれを防止しています。

実際にはOrderedMapを使用していますが、それは違いがあります。

+0

https://facebook.github.io/immutable-js/docs/#/Map/map – Ben

+1

こんにちはベン、mapに渡された関数は新しい値を返すと期待されています。私は両方を変更する必要があるので、新しいキー/値のペアを生成すると予想されるものを探しています。 –

+0

良い点、私は明らかに質問を正しくしなかった – Ben

答えて

2

私が探していた機能はmapEntriesです。ここでは例です:

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

mapEntriesは配列として、キー/値のペアを取る関数を取り、別の配列としても、新しいキー/値のペアを返す必要があります。

関連する問題