Javascript OrderedMap中项目的索引
正如标题所述,我想得到一个特定项目的索引。有办法做到这一点吗Javascript OrderedMap中项目的索引,javascript,immutable.js,Javascript,Immutable.js,正如标题所述,我想得到一个特定项目的索引。有办法做到这一点吗 const key = 1 const map = new Immutable.OrderedMap([5, 'a'], [3, 'b'], [1, 'c']) 因此,在这种情况下,key的索引将是2您可以从地图中获得键序列: let index = map.keySeq().findIndex(k => k === key); 或者,您可以显式迭代键并比较它们: function findIndexOfKey(map,
const key = 1
const map = new Immutable.OrderedMap([5, 'a'], [3, 'b'], [1, 'c'])
因此,在这种情况下,
key
的索引将是2
您可以从地图中获得键序列:
let index = map.keySeq().findIndex(k => k === key);
或者,您可以显式迭代键并比较它们:
function findIndexOfKey(map, key) {
let index = -1;
for (let k of map.keys()) {
index += 1;
if (k === key) {
break
}
}
return index;
}
最好的方法是使用immutablejs inners 像这样:
const index = orderedMap._map.get(k);
如果需要键和值以及索引,可以迭代
entrySeq
orderedMap.entrySeq().forEach((tuple,i) => console.log(`Index ${i} \n Key ${tuple[0]} \n Value ${tuple[1]}`)
这就是我现在正在做的(
.indexOf(key)
),但我担心这种方法的性能影响,并想知道是否有更好的方法,因为OrderedMap没有提供获取索引本身的方法,所以您必须找到另一种方法。AFAIK序列是惰性的,所以它可能相当于一个简单的循环。提供了另一种方法。问题:从映射中删除键时,索引不会更新:let map=new Immutable.OrderedMap([[“a”,1],“b”,2]]);map.remove(“a”)。_map.get(“b”)#1
。此外,它使用的是未记录的内部构件,这可能会有问题。很遗憾,因为这是O(1)而不是findIndex
的O(n)。