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

时间:2019-03-13 20:41:18

标签: immutable.js

是否有一种简单的方法可以在具有数字键的不可变地图上执行范围查询(例如,让我用50至100之间的键获得所有k,v对?)

1 个答案:

答案 0 :(得分:0)

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

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

不幸的是,ImmutableJS中没有内置的方法可以为您做到这一点。

以下是一些可帮助您的代码:

初始化

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

方法1

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

方法2

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