2012-05-21 16 views
6

मैं निम्नलिखित जावास्क्रिप्ट वस्तु से मुसीबत this को हटाने (एक विशिष्ट 'घटना') हो रहा है जब this एक jQuery .each() पाश से है।एक jQuery चाहते प्रत्येक में एक जावास्क्रिप्ट वस्तु से हटाएँ()

weatherData:

{ 
    "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" 
     } 
    } 
} 

यह .each() पाश की एक सिकुड़ा हुआ संस्करण है:

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

बेहतर होगा कि तुम बस weatherData.events खाली हो सकता है (weatherData.events = {}), इसे हटाने के लिए कोशिश कर के बजाय। एक साक्षात्कार में वी 8 लेखकों में से एक के अनुसार मैंने हाल ही में सुना है, जब आप ऑब्जेक्ट के सदस्य को हटाते हैं, तो ऑब्जेक्ट को वापस हैश में परिवर्तित कर दिया जाता है, फिर किसी ऑब्जेक्ट पर वापस किया जाता है, जबकि किसी ऑब्जेक्ट के भीतर पुन: असाइनमेंट में ऑब्जेक्ट नहीं होता है-> हैश -> ऑब्जेक्ट प्रदर्शन दंड। – BrianFreud

+0

यह अच्छी सलाह की तरह लगता है। मैं ऐसा करूँगा अगर मैं कुछ सामग्री को सहेजने की कोशिश नहीं कर रहा था। मैं केवल कुछ घटनाओं को हटा रहा था, उन सभी में से नहीं। मैं अपने पोस्ट को शुरुआती विवरण में अधिक विशिष्ट होने के लिए अपडेट करूंगा। – fishpen0

उत्तर

7

आप एक वस्तु जहां एक स्ट्रिंग (संपत्ति नाम) की उम्मीद है का उपयोग कर रहे हैं। मेरा मानना ​​है कि आप चाहते हैं:

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

... $.each क्योंकि संपत्ति नाम (जैसे, "Move Out Day") इटरेटर कार्य करने के लिए पहला तर्क है, जो आप i के रूप में स्वीकार कर रहे हैं के रूप में में पारित करेंगे। तो ऑब्जेक्ट से उस संपत्ति को हटाने के लिए, आप उस नाम का उपयोग करते हैं।

Gratuitous live example | source

+0

मैं इटेटरेटर की कोशिश नहीं करने के लिए मूर्ख महसूस करता हूं जब मैंने इसे फ़ंक्शन पैरामीटर में जोड़ने के लिए भी समय लगाया। आपका बहुत बहुत धन्यवाद! – fishpen0

1

आपको आइटम का नाम चाहिए, इसका संदर्भ नहीं। कॉलबैक फ़ंक्शन में पैरामीटर का उपयोग करें:

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

रेफरी: http://api.jquery.com/jQuery.each/

संबंधित मुद्दे