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)。