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];
}
})
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
You need the name of the item, not a reference to it. Use the parameters in the callback function:
$.each(weatherData.events, function(key, value){
if(value.type == "One Time"){
delete weatherData.events[key];
}
});
Ref: http://api.jquery.com/jQuery.each/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With