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.");
}