如何映射地图中的键值以使用ImmutableJS生成另一个地图?

时间:2016-08-29 04:21:41

标签: immutable.js

如何使用ImmutableJS通过映射输入映射的键/值对来生成新映射?

在Scala中,我会做这样的事情:

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。)

我意识到由于潜在的密钥冲突,无法保证产生定义的结果。在我的申请中,我在其他地方阻止了这一点。

我实际上正在使用OrderedMap,如果这有所不同。

1 个答案:

答案 0 :(得分:5)

我正在寻找的功能是mapEntries。这是一个例子:

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

mapEntries接受一个将键/值对作为数组的函数,并且还应该将新的键/值对作为另一个数组返回。