2016-04-10 13 views
-1

私はオブジェクトをインデックスとして使用しています。固定キーインデックスの維持

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

その後、私はindexにオブジェクトを追加することができます:私は、インデックス内のオブジェクトを削除した場合、

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

しかし、そのように私は、新しいキーを取得するためにカウンタを使用

const index= {}; 

新しいものを追加すると、穴があり、キーが大きくなることがあります。

このような問題のパターンが存在するかどうかを知りたいのですが、よく表示されます。

+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

関連する問題