3
respostas

Media de varias salas dentro de uma escola

//Objeto escola com suas salas para calcular a media da salas const escola = { $salas: { salaJS: [7, 8, 8, 7, 10, 6.5, 4, 10, 7], salaJava: [6, 5, 8, 9, 5, 6], salaPython: [7, 3.5, 8, 9.5] } };

//função medias function result(resultado){ return parseFloat(resultado.reduce( (previousValue, currentValue)=> (previousValue + currentValue) )/resultado.length).toFixed(1);};

//saída no log de cada sala dentro da escola:

console.log(` Média das salas de: \nJavascript é ${result(escola.$salas.salaJS)}

\nJava é ${result(escola.$salas.salaJava)}

\nPython é ${result(escola.$salas.salaPython)}`);

Help!

Estou tentando realizar um loop para retornar cada array dentro da escola e salas, se conseguir vai ficar dinâmico.

3 respostas

Bom dia, Wilson!

Você pode fazer com um simples for:

for( let i = 0; i < array.length; i++){

    /*aqui você passa sua função reduce 
    passando como parâmetro o nome do array onde ficam as salas [i] 
    para conseguir acessar os 3 arrays e dar o reduce */

}

Oi Wilson, tudo bem?

Vou te mandar uma solução que acredito ser a mais didática:

const escola = {
    $salas: {
        salaJS: [7, 8, 8, 7, 10, 6.5, 4, 10, 7],
        salaJava: [6, 5, 8, 9, 5, 6],
        salaPython: [7, 3.5, 8, 9.5]
    }
};
const safeMedia = data => Array.isArray(data) ? data.reduce((acc, v) => acc + v, 0) / data.length : data

const salas = escola.$salas

const salasComAsMedias = {}

for (let prop in salas) {
    salasComAsMedias[prop] = safeMedia(salas[prop])
}
console.log(salasComAsMedias)
//output { salaJS: 7.5, salaJava: 6.5, salaPython: 7 }

Você pode encapsular essa solução dentro de uma função ou adaptar da forma que desejar.

Caso essa resposta tenha te ajudado não esqueça de marcar como solução para que o tópico seja encerrado.

Bons estudos.

Galera, boa tarde! Tudo bem com vocês?

Cheguei nesse resultado agora, não tinha visto o posts de vocês, mas acredito que chegamos no mesmo consenso:

/* Função com que calcula a media da sala*/ function result(resultado){ return parseFloat(resultado.reduce( (previousValue, currentValue)=> (previousValue + currentValue) )/resultado.length).toFixed(1);};

/For que calcula cada sala dinamicamente/ for(sala in escola.$salas){ console.log(A media da ${sala} é: ${result(escola.$salas[sala])}); }