providers = providers.filter(function(provider) { return provider.age > 35 }
For performance or API reasons you might want to perform an in place removal using splice, so you can simple map the values to indexes you want to remove, reverse the order then perform a sequence of splice operations:
providers.map(function(provider, index) { return provider.age > 35 ? index : -1; }).filter(function(index) { return index >= 0; }).reverse().forEach(function(index) { providers.splice(index,1); });
You can play with this code in this jsfiddle.
Update 21 Jan 20125: The hazard of doing full stack development is that it is easy to accidentally duck type between languages whilst forgetting the impact. In Java the equivalent streaming code using map just returns another lazy step in the stream whereas in JavaScript you end up creating a new array of the same size as the original. This removes the performance improvement over the first example if you have lots of data. This is simple too fix though as you can use the reduce function to just create an array and populate it using the reduce operation:
providers.reduce(function(list, provider, index) { if (provider.age> 35) list.push(index); return list; }, []).reverse().forEach(function(index) { providers.splice(index,1); });
Here is the updated fiddle. I guess at some point I am going to have to benchmark these variants to see which is best; but that is for a less busy day.