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);