To add the values you can use the following function:
function somarRegioes(vendas)
{
totais = {};
obs = Object.keys(vendas).map(function (key1)
{
var obs_vendas = vendas[key1];
Object.keys(obs_vendas).map(function (key2)
{
var regiao = obs_vendas[key2]['Regiao'];
// Se a região ainda não existir em totais.
if(totais[regiao] === undefined)
totais[regiao] = 0;
totais[regiao] += obs_vendas[key2]['Valor'];
});
});
return totais;
}
Or with this:
function somarRegioes(vendas)
{
totais = {};
for(var obs in vendas)
{
for(var venda in vendas[obs])
{
var regiao = vendas[obs][venda]['Regiao'];
// Se a região ainda não existir em totais.
if(totais[regiao] == undefined)
totais[regiao] = 0;
totais[regiao] += vendas[obs][venda]['Valor'];
}
}
return totais;
}
What's left as:
vendas = {obs1:{Venda1:{Regiao:"Norte", Valor: 200}, Venda2:{Regiao:"Sul", Valor:100}}, obs2:{Venda1:{Regiao:"Norte", Valor: 50}, Venda2:{Regiao:"Sul", Valor:20}}}
resultado = somarRegioes(vendas); // output = Object {Norte: 250, Sul: 120}
I find it a bit complicated to do this without loops, as this will occur indirectly, because the input is dynamic.