Delete this from a javascript object in a jQuery .each()

each, javascript, jquery, object

Solution

You're using an object where a string (the property name) is expected. I believe you want:

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

...because `$.each` will pass in the property name (e.g., `"Move Out Day"`) as the first argument to the iterator function, which you're accepting as `i`. So to delete that property from the object, you use that name.

Gratuitous live example | source

Problem

I am having trouble deleting `this` (a specific 'event') from the following javascript object, when `this` is from a jquery `.each()` loop. 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" } } } ``` This is a shrunken version of the `.each()` loop: ``` $.each(weatherData.events, function(i){ if(this.type == "One Time"){ delete weatherData.events[this]; } }) ```

Original source