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

Lista Exercícios aula 4 (4 e 5)

const animais = require('./animais.json');

const animaisObj = animais;

const novoAnimal = {
    id: 6,
    nome: 'Cobra',
    tipo: 'Réptil',
    habitat: 'Floresta Tropical'
}

// Explorando formas de adicionar

// O array original não é modificado, um novo array é criado.
// const novoArray = animaisObj.animais.concat(novoAnimal);


// adicionar com o push diretamente após o ultimo
function adicionaAnimalNoFim (animalObj, animalJsObj) {
    animalObj.animais.push(animalJsObj);
}
// Adicionar com splice onde passamos como parametro aonde começar, remove algum?, o que queremos adicionar.
function adicionaAnimalSplice ({animalObj, start, del, animalJsObj}) {
    animalObj.animais.splice(start, del, animalJsObj);
}

// Remove com splice onde passamos como parametro quem remover
function removerAnimalSplice ({animalObj, campo, condicao}) {
    const index = animalObj.animais.findIndex(animal => condicao(animal[campo]))
    animalObj.animais.splice(index, 1);
}

// Possível realizar com filter mas o objetivo do filter e retonar um novo array com os valores que atendem a condição, apesar de funcionar vai contra o objetivo do método
function modificaAnimalFilter ({ animalObj, campo, condicao, modifica, valor }) {
    for(const animal in animalObj) {
        return animalObj[animal].filter(item => {
            if(!item.hasOwnProperty(campo)) {
                throwPropertyNotFoundError(campo, item);
            }else if(condicao(item[campo])) {
                item[modifica] = valor;
            }
        });
    }
}
// Função mais adequado se considerar a validade de manipular o objeto original
function modificaAnimalForEach({ animalObj, campo, condicao, modifica, valor }) {
    for (const animal in animalObj) {
        animalObj[animal].forEach(element => {
            console.log(element[campo]);
            if(!element.hasOwnProperty(campo)) {
                throwPropertyNotFoundError(campo, element);
            }
            else if(condicao(element[campo])) {
                element[modifica] = valor;
                console.log(element[modifica]);
            }
        });
    }
}

// Caso o objeto não tenha a propriedade um erro é lançado
function throwPropertyNotFoundError(propriedade,item) {
    throw new Error(`Propriedade '${propriedade}' não encontrada no objeto: ${JSON.stringify(item)}`);
}
// Adiciona o novo animal aonde quiser e deleta se necessario
adicionaAnimalSplice(
    {
        animalObj: animaisObj,
        start: animaisObj.animais.length,
        del: 0,
        animalJsObj: novoAnimal
    }
)

// Objeto de configuração como parametro
modificaAnimalForEach(
    {
        animalObj: animaisObj,
        campo: 'nome',
        condicao: nome => nome === 'Cobra',
        modifica: 'habitat',
        valor: 'Floresta'
    });

console.log(animaisObj);

removerAnimalSplice(
    {
        animalObj: animaisObj,
        campo: 'id',
        condicao: id => id === 2,
    }
)

const animaisString = JSON.stringify(animaisObj);
console.log(animaisString);

const pessoaOriginal = {
    id: 1,
    nome: "Melody",
    idade: 24
}

function copiaPessoa (pessoa) {
    // Maneiras diferentes de copiar um objeto
    const copia = structuredClone(pessoa)
    // const copia = JSON.parse(JSON.stringify(objOriginal));
    return copia
}

const novaPessoa = copiaPessoa(pessoaOriginal);

novaPessoa.idade = 21;
novaPessoa.nome  = 'Lily';

console.log(pessoaOriginal,'\n', novaPessoa);
1 resposta
solução!

Olá Israel!

Você está explorando diferentes formas de manipular arrays e objetos em JavaScript, o que é ótimo para entender como lidar com dados de forma eficiente.

Se você tiver dúvidas específicas sobre como esses métodos funcionam ou se precisar de ajuda para entender algum comportamento inesperado, sinta-se à vontade para perguntar!

Bons estudos!