保持关键指数稳定

时间:2016-04-10 16:21:30

标签: javascript design-patterns indexing

我有一个用作索引的对象。

const index= {};

我使用计数器来获取新密钥:

var key=0; 
function getNewKey(){
   return ++key;
}

然后我可以将对象添加到index

function addObject(object){
    const key= getNewKey();
    index[key]= object;
    return key;
}

但是,像这样,如果我删除索引中的对象,并添加新的对象,就会出现漏洞,并且密钥可能会变大。

所以我想知道是否存在这种问题的模式,这种模式经常出现。

1 个答案:

答案 0 :(得分:1)

您可以使用数组作为索引。

function removeObject(key) {
    index[key] = undefined;
    if( key == index.length - 1 ) index.pop();
}

然后可以通过将相应的数组条目设置为indexOf来完成删除对象。

function addObject(object) {
    const pos = index.indexOf(undefined)
    const key = pos == -1 ? index.length : pos;
    index[key]= object;
    return key;
}

新对象放置在数组的下一个空闲槽中,可以使用{{1}}方法找到它。

{{1}}

使用这种方法,密钥大小将是最小的。由于数组实现通常是稀疏的,如here所述,内存使用量也会尽可能小。