如何在不可变地图上执行范围查询?

How do I perform range queries on an immutable Map?

有没有一种简单的方法可以在带有数字键的不可变地图上执行范围查询(例如,获取键在 50 到 100 之间的所有 k,v 对)?

这可以通过以下两种方式之一完成。您可以:

  1. 遍历地图的全部内容并过滤掉您不感兴趣的值。
  2. 从最小值迭代到最大值并将地图中的所有值提取到新地图中

不幸的是,ImmutableJS 中没有内置的方法可以为您执行此操作。

这里有一些代码可以帮助您:

初始化

map = Immutable.Map([ [ 10, 'a' ], [ 20, 'b' ], [ 5, 'c' ], [ 100, 'd' ] ])
min = 0
max = 10

方法一

map.filter((_, key) => key >= min && key <= max)

方法二

let range = Array.apply(0, Array(max - min + 1)).map((_, index) => index + min);
return range.reduce((acc, key) => {
  return map.has(key) ?
    acc.set(key, map.get(key)) :
    acc;
}, Immutable.Map())

https://observablehq.com/@alexrass/extract-range-from-immutable-map