如何使用 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 }
(我通过 Babel 使用 ES6。)
我意识到,由于潜在的按键冲突,这并不能保证产生定义的结果。在我的应用程序中,我在其他地方阻止了这种情况。我实际上正在使用
OrderedMap
,如果这有什么不同的话。
Immutable.fromJS({1: 2, 3: 4}).mapEntries(([k, v]) => [k*k, v*v*v]).toJS()
// { 1: 8, 9: 64 }
mapEntries
采用一个将键/值对作为数组的函数,并且应该将新的键/值对也作为另一个数组返回。
Immutable.fromJS({ 1: 2, 3: 4 })
.entrySeq()
.map(([k, v]) => [k*k, v*v*v])