Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Viajei na prática do filter tem algum metodo melhor?

Tem algum metodo do array que poderia realizar a mesma funcionalidade de uma maneira mais simples?

const alunos = ['Ana', 'Marcos', 'Maria', 'Mauro'];
const medias = [7, 4.5, 8, 7.5];
// Arrays que recebem a situação de aprovados ou reprovados dos alunos
let aprovados  = [];
let reprovados = [];
// Criando uma função que como condição verifica com base no valor da media se está aprovado ou reprovado
const condicaoAprovado  = (media) => media >= 7;
const condicaoReprovado = (media) => media < 7;
// Prepara um novo array com os valores de aluno aprovados e reprovados.
const aprovaReprova = (condicao) => {
    // Filter recebe uma função de call back que recebe o elemento(aluno) como parametro e opcional o índice
    // os parametros nao podem estar fora de ordem como não usamos o primeiro trocamos por _
    // o retorno esperado pelo filer é true ou false, sabendo que quando true deve passar o resultado do elemento para um novo array
    // chamamos a função definida nas condições que recebem como parametro o valor que se encontra no array medias para realizar a verificação condicional
    return alunos.filter((_, index) => condicao(medias[index]));
}
// Verifica quais alunos foram aprovados
function verificarAprovados() {
    aprovados = aprovaReprova(condicaoAprovado);
}
// Verifica quais alunos foram reprovados
function verificarReprovados() {
    reprovados = aprovaReprova(condicaoReprovado);
}
// Chama as funções para popular os arrays
verificarAprovados();
verificarReprovados();
// Exibe no console o resultado
console.log(`Aprovados: ${aprovados}, Reprovados: ${reprovados}`);
1 resposta
solução!

Oi Israel,

A sua dúvida sobre a utilização do método filter é válida, pois existem outras abordagens que podem simplificar seu código. No entanto, o filter é uma maneira eficiente e clara de separar os alunos aprovados e reprovados.

Uma alternativa é usar o método reduce, que permite acumular resultados em um único array ou objeto, podendo separar os aprovados e reprovados. Veja um exemplo:


const alunos = ['Ana', 'Marcos', 'Maria', 'Mauro'];
const medias = [7, 4.5, 8, 7.5];

const resultado = alunos.reduce((lista, aluno, index) => {
  const media = medias[index];
  if (media >= 7)
    lista.aprovados.push(aluno);
  else
    lista.reprovados.push(aluno);  
  return lista;
}, { aprovados: [], reprovados: [] });

console.log(`Aprovados: ${resultado.aprovados}, Reprovados: ${resultado.reprovados}`);

Outra alternativa é usar o método forEach, para percorrer todo array de alunos e separar os aprovados e reprovados. Veja um exemplo:


const alunos = ['Ana', 'Marcos', 'Maria', 'Mauro'];
const medias = [7, 4.5, 8, 7.5];

const aprovados = [];
const reprovados = [];

alunos.forEach( (aluno, index) => {
  const media = medias[index];
  if (media >= 7)
    aprovados.push(aluno);
  else
    reprovados.push(aluno);  
});

console.log(`Aprovados: ${aprovados}, Reprovados: ${reprovados}`);

Outra forma de usar o filter


const alunos = ['Ana', 'Marcos', 'Maria', 'Mauro'];
const medias = [7, 4.5, 8, 7.5];

const aprovados = alunos.filter((_, index) => medias[index] >= 7);
const reprovados = alunos.filter((_, index) => medias[index] < 7);

console.log(`Aprovados: ${aprovados}, Reprovados: ${reprovados}`);

Na verdade, vc pode usar qualquer método, o importante é chegar no resultado esperado

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓