Como somar valores de um objeto que vem com nomes dinâmicos

Boa noite Galera!

Estou com um probleminha que não consegui resolver de jeito nenhum, vamos direto ao ponto!

Tenho o seguinte Array de objeto.

[
    {"values":{"nome1":5,"nome2":3},
    {"values":{"nome1":2,"nome3":2},
    {"values":{"nome2":1,"nome5":3},
    {"values":{"nome3":1},
] 

Preciso somar esses valores que estão com os nomes iguais e colocar dentro de um array assim:

   [
        {"values":{"nome1":7, "nome2":4, "nome3":3, "nome5": 3}
   ]

Se alguém puder me ajudar ficarei muito grata! Obrigada :heartbeat:

Você pode construir primeiro o objeto mais interno, que tem os totais de cada nome, e depois você coloca ele na estrutura maior. Algo assim:

var dados = [
    { "values" : { "nome1" : 5, "nome2" : 3 } },
    { "values" : { "nome1" : 2, "nome3" : 2 } },
    { "values" : { "nome2" : 1, "nome5" : 3 } },
    { "values" : { "nome3" : 1 } },
];

var result = {};
for (var d of dados) { // para cada objeto que tem "values"
    // para cada "nome": valor dentro do "values"
    for (var [nome, valor] of Object.entries(d.values)) {
        if (! result[nome]) { // se ainda não tem o nome, usa o valor dele
            result[nome] = valor;
        } else { // se já tiver o nome, soma com o valor atual
            result[nome] += valor;
        }
    }
}

// joga o objeto com os totais dentro do array
result = [ { "values": result } ];
1 curtida

Muito obrigada de coração :heartbeat::heartbeat: