2016-04-10 10 views
-1

İndeks olarak kullanılan bir nesnem var. Ben endekste nesneleri kaldırırsanız, bunun gibi,Bir anahtar endeksin sabit kalması

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

Ama:

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

Sonra index nesneyi ekleyebilirsiniz:

const index= {}; 

Ben yeni bir anahtar almak için bir sayaç kullanın ve yenilerini ekleyin, delikler olacak ve anahtar büyük olabilir.

Bu tür sorunların sık sık göründüğü kalıplar olup olmadığını bilmek istiyorum.

+0

Bunun için bir dizi kullanabilirsiniz. Anahtarlar endeksli sayılar nedeniyle neden düz bir nesneyi kullanmak istersiniz? –

+0

evet ama sorun aynı – Gael

+0

Nesneleri kaldırmak için 'index [anahtar]' sil kullanıyorsanız, delik olmayacaktır. Ve daha büyük anahtarların problemi nedir? – user0815

cevap

1

Dizininizi dizininiz olarak kullanabilirsiniz. nesne kaldırma

const index= []; 

sonra undefined karşılık gelen bir dizi giriş ayarı yapılabilir.

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

Yeni bir nesne indexOf yöntemle bulunabilir dizinin, bir sonraki serbest alanına yerleştirilir.

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

Bu yaklaşımla, anahtar boyutu en aza indirgenecektir. Dizi uygulamaları genellikle here tartışıldığı gibi seyrek olduğundan, bellek kullanımı mümkün olduğunca küçük olacaktır.

+0

iyi bir yaklaşım, teşekkürler. – Gael

İlgili konular