2012-05-21 16 views
6

this bir jquery .each() döngüden olduğunda ben aşağıdaki javascript nesneden sorun this silme (belirli bir 'olay') yaşıyorum.bir jQuery .each bir javascript nesneden Bunu sil()

Hava Bilgisi:

{ 
    "events":{ 
     "Birthday":{ 
      "type":"Annual", 
      "date":"20120523", 
      "weatherType":"clouds", 
      "high":"40", 
      "low":"30", 
      "speed":"15", 
      "direction":"0", 
      "humidity":"0" 
     }, 
     "Move Out Day":{ 
      "type":"One Time", 
      "date":"20120601", 
      "weatherType":"storm", 
      "high":"80", 
      "low":"76", 
      "speed":"15", 
      "direction":"56", 
      "humidity":"100" 
     } 
    }, 
    "dates":{ 
     "default":{ 
      "type":"clouds", 
      "high":"40", 
      "low":"30", 
      "speed":"15", 
      "direction":"0", 
      "humidity":"0" 
     }, 
     "20120521":{ 
      "type":"clear", 
      "high":"60", 
      "low":"55", 
      "speed":"10", 
      "direction":"56", 
      "humidity":"25" 
     } 
    } 
} 

Bu .each() döngünün bir küçülmüş versiyonu: Bir dize (özellik adı) beklenen bir nesne kullandığınız

$.each(weatherData.events, function(i){ 
    if(this.type == "One Time"){ 
     delete weatherData.events[this]; 
    } 
}) 
+0

Sadece weatherData.events boşaltma daha iyi olabilir (weatherData.events = {}), silmeyi denemeden ziyade. Bir röportajda v8 yazarlarından birine göre son zamanlarda, bir nesnenin üyesini sildiğinizde, nesne bir karmaşa, sonra bir nesneye geri dönüştürülürken, bir nesne içinde yeniden atama nesneye sahip olmaz. -> nesne performans cezaları. – BrianFreud

+0

Bu iyi bir tavsiye gibi geliyor. Eğer bazı içerikleri saklamak istemediysem yapardım. Sadece belirli olayları siliyordum, hepsini değil. Açılış açıklamasında daha spesifik olmak için yayınımı güncelleyeceğim. – fishpen0

cevap

7

. İstediğin inanıyoruz:

$.each(weatherData.events, function(i){ 
    if(this.type == "One Time"){ 
     delete weatherData.events[i]; 
     // change is here --------^ 
    } 
}); 

... $.each çünkü i olarak kabul ediyoruz yineleyici işlevine ilk argüman olarak mülkiyet adı (örneğin "Move Out Day") geçecek. Bu özelliği nesneden silmek için, bu adı kullanırsınız.

Gratuitous live example | source

+0

Fonksiyon parametrelerini eklemek için zaman bile aldığımda yineleyiciyi denemediğim için aptal hissediyorum. Çok teşekkürler! – fishpen0

1

Öğenin adına, referansa gerek yoktur. Geri arama işlevinde parametreleri kullanın:

$.each(weatherData.events, function(key, value){ 
    if(value.type == "One Time"){ 
    delete weatherData.events[key]; 
    } 
}); 

Ref: http://api.jquery.com/jQuery.each/

İlgili konular