2016-04-10 3 views
-1

У меня есть объект, который используется как индекс.Поддержание постоянного индекса ключа

const index= {}; 

Я использую счетчик, чтобы получить новый ключ:

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

Тогда я могу добавить объект index:

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

Но, как и что, если удалить объекты в индексе , и добавить новые, будут дыры, и ключ может стать большим.

Так что я хотел бы знать, были ли шаблоны для такого рода проблем, которые часто появляются.

+0

Вы можете использовать массив для этого. почему вы хотите использовать простой объект, поскольку ключи являются индексированными номерами? –

+0

да, но проблема одна и та же – Gael

+0

Не будет отверстий, если вы используете 'delete index [key]' для удаления объектов. И в чем проблема с большими ключами? – user0815

ответ

1

Вы можете использовать массив в качестве своего индекса.

const index= []; 

Удаление объекта может быть сделано путем установки соответствующей записи массива к undefined.

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; 
} 

При таком подходе размер ключа будет минимальным. Поскольку реализации массивов обычно разрежены, как обсуждалось here, использование памяти будет как можно меньше.

+0

хороший подход, спасибо. – Gael

Смежные вопросы