【问题标题】:Immutable JS - Creating an OrderedMap from a List不可变 JS - 从列表创建 OrderedMap
【发布时间】:2017-09-28 23:33:20
【问题描述】:

我有一个List

const results = [94, 88, 121, 17];

还有Map

const posts = {
   94: { title: 'Foo bar', content: 'Blah blah blah...' },
   88: { title: 'Bar Foo', content: 'Blah blah blah...' },
   121: { title: 'Bing bang', content: 'Blah blah blah...' },
   17: { title: 'Ning nang', content: 'Blah blah blah...' },
};

List实际上持有Map中项目的顺序,因为maps/objects不能保证顺序。

使用上面的ListMap 创建OrderedMap 的最有效方法是什么?

【问题讨论】:

  • Immutable.OrderedMap(results.map(id => [id, posts.get(id.toString())]))

标签: javascript reactjs functional-programming redux immutable.js


【解决方案1】:

在 Immutable.js 中没有内置的构造函数可以处理这个问题,所以你必须自己做映射:

const orderedPosts = new OrderedMap(results.map(key => [key, posts[key]]))

【讨论】:

  • 谢谢这就是我的意思,但更重要的是我在这里遗漏了什么吗?地图订单是否值得信赖?这在计算上是否超级昂贵?
  • 是的,因为Array#mapArray 上的一个方法,与所有此类方法一样,它的结果按照您正在操作的数组的顺序排列。至于效率,你必须做一些分析。我希望它是有效的(没有理由不应该是 O(n))。
  • 不抱歉,我的意思是Map 的命令值得信任吗?不过谢谢!看起来很有效率..
  • 不保证Map 的顺序(无论是原生 ES2015 实现还是 Immutable.js)。因此 OrderedMap 在 Immutable.js 中。
  • 一个 Immutable.js List?不...JavaScript 不支持运算符重载(很遗憾),因此您必须使用带有整数索引的List#get。它类似于数组,但您必须使用get 而不是方括号。
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2012-07-24
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2015-08-01
相关资源
最近更新 更多