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

问题描述 投票:0回答:2

如何使用 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.js
2个回答
9
投票
我正在寻找的功能是

mapEntries

。这是一个例子:

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

mapEntries

 采用一个将键/值对作为数组的函数,并且应该将新的键/值对也作为另一个数组返回。


0
投票
或者:

Immutable.fromJS({ 1: 2, 3: 4 }) .entrySeq() .map(([k, v]) => [k*k, v*v*v])

    讨论:
  • https://github.com/immutable-js/immutable-js/issues/667
  • 文档:
  • https://immutable-js.com/docs/v4.3.7/Map/#entrySeq()
  • 游乐场:
  • https://neilff.github.io/immutable-repl/?q=ZnJvbUpTKHsxOiAyLCAzOiA0fSkKICAuZW50cnlTZXEoKQogIC5tYXAoKFtrLCB2XSkgPT4gW2sqaywgdip2KnZdKQo%3D
© www.soinside.com 2019 - 2024. All rights reserved.