我有一个用作索引的对象。
const index= {};
我使用计数器来获取新密钥:
var key=0;
function getNewKey(){
return ++key;
}
然后我可以将对象添加到index
:
function addObject(object){
const key= getNewKey();
index[key]= object;
return key;
}
但是,像这样,如果我删除索引中的对象,并添加新的对象,就会出现漏洞,并且密钥可能会变大。
所以我想知道是否存在这种问题的模式,这种模式经常出现。
答案 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所述,内存使用量也会尽可能小。