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

[Dúvida] Lista de exercícios aula 5

Tem algum site onde posso pegar exercicios para fixar manipular objetos? Com os objetos ficou muito grande está no pen https://codepen.io/Israel-Oliveira-Pinto/pen/xbKVLvo

function encontrarLivroPorId(objeto, propriedade, valor) {
    const livro = objeto.find((item) => item[propriedade] === valor);
    // Se não acha o livro retorna undefined que tem o mesmo comportamento que null falsy
    if(!livro){
        throw new Error(`Livro com o ${propriedade} ${valor} não encontrado.`);;
    }
    return livro;

}

function filtrar(objeto, propriedade, valor, condicao = (a, b) => a === b) {
    
    // Uma ideia que alguns objetos podem ter propriedades faltantes que podem ser filtrados para futuros tratamentos de inclusão.
    // Verifica se pelo algum objeto possui aquela propriedade e lança um erro se nenhum possuir
    const algumTemPropriedade = objeto.some(item => item.hasOwnProperty(propriedade));

    if (!algumTemPropriedade) {
        throw new Error(`Nenhum objeto possui a propriedade ${propriedade}.`);
    }
    // Converte o valor para minúsculo se for uma string
    if(typeof valor === 'string') valor = valor.toLocaleLowerCase();
    
    return objeto.filter((item) => {
        // Se o valor for uma string verifica se alguma substring contém o valor
        if(typeof item[propriedade] === 'string' && valor) return item[propriedade].toLocaleLowerCase().includes(valor);
        // se o campo existe em agum objeto significa que está faltando nessas entradas e devolvemos uma lista com os objetos que precisam ser atualizados

        // Verifica a condiçao passada
        if (condicao(item[propriedade], valor)) return true;

        // Faz filtragem por atributos que existem mas estão faltando em certos objetos.
        if(!item.hasOwnProperty(propriedade) && !valor){
            return true;
        }
    })
}

function ordenar(objeto, propriedade, comparacao = 'asc') {
    return objeto.sort((a, b) => {
        let valorA = typeof a[propriedade] === 'string' ? a[propriedade].toLocaleLowerCase() : a[propriedade];
        let valorB = typeof b[propriedade] === 'string' ? b[propriedade].toLocaleLowerCase() : b[propriedade];

        if (typeof valorA === 'string' && typeof valorB === 'string') {
            const comparison = valorA.localeCompare(valorB)
            if (comparacao === 'asc') return comparison
            return -comparison; // Para ordenação decrescente
        }

        if (valorA < valorB) return comparacao === 'asc' ? -1 : 1;
        if (valorA > valorB) return comparacao === 'asc' ? 1 : -1;
        return 0;
    })
}

function encontrarFuncionarioPorId (obj, id) {
    for (const departamento of departamentos) {
        const funcionarios = departamento.funcionarios.find((func) => func.id === id);
        if(funcionarios) return funcionarios;
    }
    return null;
}
// Função génerica que procura por propriedade é lida com objetos e listas de objetos aninhadas
function encontrarPorPropriedade(dados, propriedade, valor) {
        
        // Verifica se dados é um array ou um objeto
        if (Array.isArray(dados)) {
            // Caso seja um array, procuramos em cada item
            for (const item of dados) {
                const resultado = encontrarPorPropriedade(item, propriedade, valor);
                if (resultado) return resultado;
            }
        } else if (typeof dados === 'object' && dados !== null) {
            // Caso seja um objeto, verificamos a propriedade diretamente
            if (dados.hasOwnProperty(propriedade) && dados[propriedade] === valor) {
                return dados;
            }
            // Caso contrário, verificamos se algum valor aninhado possui a propriedade
            for (let chave in dados) {
                const resultado = encontrarPorPropriedade(dados[chave], propriedade, valor);
                if (resultado) return resultado;
            }
        }
        return null; // Se não encontrar, retorna null
}

try{
    const livro = encontrarLivroPorId(biblioteca, 'id', 3)
    console.log(livro);
}catch(error) {
    console.log(error.message);
}

try{
    // Filtra por ano de lançamento
    const filmesFiltrados = filtrar(catalogoFilmes, 'anoLancamento', 2019);
    // Filtra filmes que não tem o atributo ano de lançamento
    const filmesFiltrados2 = filtrar(catalogoFilmes, 'anoLancamento');
    // Filtra por diretor com substring e lowercase enforced
    const filmesFiltrados3 = filtrar(catalogoFilmes, 'diretor', 'quentin');
    console.log(filmesFiltrados, filmesFiltrados2, filmesFiltrados3);
}catch(error) {
    console.log(error.message);
}

const filtrarFuncionarios = encontrarPorPropriedade(departamentos, 'id', 402);
if(filtrarFuncionarios){
    console.log('Funcionário encontrado: ', filtrarFuncionarios);
} else {
    console.log("Nenhum funcionário com os dados pesquisados foi encontrado.");
}
1 resposta
solução!

Oi Israel,

Sites que oferecem exercícios para praticar programação em JavaScript.

  1. LeetCode: É uma plataforma que oferece uma grande variedade de problemas de programação para você resolver. Além disso, você pode ver soluções de outros usuários e discutir sobre as melhores abordagens. {Grátis, com recursos pagos}

  2. HackerRank: É uma plataforma que possui uma seção específica para exercícios de JavaScript. Eles oferecem desafios de diferentes níveis de dificuldade, o que é ótimo para praticar e aprimorar suas habilidades. {Grátis, com recursos pagos}

  3. Codewars: Nesse site, você pode resolver problemas de programação em JavaScript e também em outras linguagens. Os exercícios são classificados por níveis de dificuldade e você pode ganhar "kyu" à medida que resolve mais desafios. {Grátis}

  4. Exercism: Essa plataforma oferece exercícios práticos em várias linguagens de programação, incluindo JavaScript. Você pode resolver os problemas e receber feedback de mentores para melhorar suas soluções. {Grátis}

  5. freeCodeCamp: Oferece uma ampla variedade de exercícios de programação, incluindo desafios específicos de JavaScript, além de projetos práticos para construir um portfólio. {Grátis}

  6. Codecademy: Possui cursos interativos e exercícios práticos de JavaScript. Ideal para iniciantes que desejam aprender do básico ao avançado. {Grátis, com recursos pagos}

  7. Edabit: Um site focado em desafios curtos e diretos de programação, ideal para praticar JavaScript e outras linguagens de maneira consistente. {Grátis, com recursos pagos}

  8. W3Schools: Além de ser um excelente recurso para aprender JavaScript, oferece exercícios básicos e avançados para praticar diretamente no navegador. {Grátis}

  9. CodeSignal: Possui exercícios interativos e desafios específicos para entrevistas de emprego, além de práticas em JavaScript. {Grátis, com recursos pagos}

  10. Pluralsight Code School: Oferece desafios interativos e aulas específicas de JavaScript, ideais para quem busca aprendizado guiado. {Pago}

Especial para Objetos

  1. JavaScript Object - Exercises, Practice, Solution

  2. Exercise: JS Objects