Los arrays en JS únicamente pueden contener keys númericas, caso contrario estás asignando properties al objeto y no elements al array.
Con respecto a tu problema, no entendí bien (y tampoco leí el link), me agarraste de buen humor, post-cervezas, por lo cual te adjunto código (no testeado) de ejemplo potencialmente relacionado a tu problema (puede que no tenga nada que ver):
Código Javascript
:
Ver originalvar app = {};
app.places = [
{
country:"España",
capital:"Madrid",
continent:"Europa"
},
{
country:"Japón",
capital:"Tokio",
continent:"Asia"
},
{
country:"Francia",
capital:"Paris",
continent:"Europa"
}
];
app.deleteByCondition = function(key, value) {
for(var i = 0; i < app.places.length; i++) {
if(app.places[i][key] == value) {
app.places.splice(i, 1);
i--;
}
}
};
app.deleteByCountry = function(country) {
app.deleteByCondition('country', country);
};
app.deleteByCapital = function(capital) {
app.deleteByCondition('capital', capital);
};
app.deleteByContinent = function(continent) {
app.deleteByCondition('continent', continent);
};
app.get = function(key, value) {
for(var i = 0; i < app.places.length; i++) {
if(app.places[i][key] == value) {
return app.places[i];
}
}
return null;
};
app.getByCountry = function(country) {
return app.exists('country', country);
};
app.getByCapital = function(capital) {
return app.exists('capital', capital);
};
app.getByContinent = function(continent) {
return app.exists('continent', continent);
};
app.countryExists = function(country) {
return app.exists('country', country) !== null;
};
app.capitalExists = function(capital) {
return app.exists('capital', capital) !== null;
};
app.continentExists = function(continent) {
return app.exists('continent', continent) !== null;
};
Con eso, debería serte sencillo verificar y eliminar registros de la colección con una semantica más acorde a tu lógica de negocios.