1
resposta

Lista Exercícios aulas 3, demorou um pouco explorei alguns metodos de objetos

Explorei alguns metodos dos objetos adicionei algumas validações e como ficou um pouco grande o completo está no codepen https://codepen.io/Israel-Oliveira-Pinto/pen/azodKBO faltou espaço pro exercicio 5.

const pessoa = {
    nome: "Kyler",
    notas: [8, 8.75, 9.5, 10],
    calcularMediaNotas: function() {
        // verifica se todos os valores do array são número antes de tentar calcular, poderia ter usado o some e mudado o lugar o que executa o block if/else
        // verifica se o array não é null ou undefined e verifica também se é de fato um Array.
        if(this.notas && Array.isArray(this.notas) && this.notas.every(nota => typeof nota === 'number')) {
            // Como um array vazio passaria pelas condições anteriores verifica se tem elementos antes de calcular a média.
            if(this.notas.length === 0) {
                return 'O array de notas está vazio.';
            }      
            else {
                return (this.notas.reduce((acumulador,nota) => acumulador + nota ,0) / this.notas.length).toFixed(2);
            }             
        } else {
            return 'O array contém valores que não são números.';
        }
    }, 
    classificarDesempenho: function(media) {
        if(media >= 9){
            return 'Desempenho excelente';
        } else if(media >= 7.5) {
            return 'Bom desempenho';
        } else if(media >= 6 ){
            return 'Desempenho regular';
        } else {
            return'Desempenho insuficiente';
        }
    }
}    
const media = pessoa.calcularMediaNotas()

if(media.startsWith('O array')){
    console.log(media);
} else {
    console.log(media);
    console.log(pessoa.classificarDesempenho(parseFloat(media)));   
}

const carro = {
    marca: 'Volkswagen',
    modelo: 'Golf GTI',
    ano: 2023,
    cor: 'Preto',
    detalhesCarro: {}
};

for(const chave in carro) {
    console.log(`A chave é ${chave} com o valor ${carro[chave]}`);
}

const detalhes = {
    motor: '2.0 TSI',
    potencia: 245,
    torque: 370,
    transmissao: 'Manual de 6 marchas',
    tracao: 'Dianteira',
    aceleracao: '0-100 km/h em 6,2 segundos',
    velocidadeMaxima: '250 km/h',
}    

carro.detalhesCarro = detalhes;

// Objetos aninhados com apenas um for in
for(const chave in carro) {
    // Verifica se chegou em um objeto aninhado
    if (typeof carro[chave] === 'object') {
        //novo laço para pegar os atributos do elemento aninhado. Para cada detalhesCarro gerar a subChave como exemplo motor
        for (const subChave in carro[chave]) {
            console.log(`A chave é ${subChave} com o valor ${carro[chave][subChave]}`);
        }
    } else {
    console.log(`A chave é ${chave} com o valor ${carro[chave]}`);
    }
}
// com spread operator
const carroDetalhado = {
    ...carro,
    ...detalhes
}
// mesma funcionalidade da operação anterior só que sem lidar com objetos aninhados
for(const chave in carroDetalhado) {
    console.log(`A chave é ${chave} com o valor ${carroDetalhado[chave]}`);
}

const carroHyundai = {
    marca: 'Hyundai',
    modelo: 'Genesis G80',
    ano: 2023,
    cor: 'Prata',
    ligado: false,
    ligar: function() { return this.ligado ?  'O carro já está ligado!' : (this.ligado = true, 'Você ligou o carro!')},
    desligar: function() { return this.ligado ?  (this.ligado = false, 'Delisgando o carro') : 'Carro já está desligado!'},
    obterDetalhes: function(){return `A marca do carro é ${this.marca} no modelo ${this.modelo} do ano ${this.ano} na cor ${this.cor} e está ${this.ligado ? 'ligado' : 'desligado'}`}
}    

console.log(carroHyundai.ligar());
console.log(carroHyundai.desligar());
console.log(carroHyundai.obterDetalhes());

// Inserindo propriedades no objeto defineProperty tem as opções necessarias para o exercicio
Object.defineProperty(carroHyundai, 'placa', {
    value: 'ABC1D23',
    enumerable: false,
    writable: true,
    configurable: true
})

for(const enumeraveis in carroHyundai) {
    console.log(`A chave é ${enumeraveis} com o valor ${carroHyundai[enumeraveis]}`);
}

const chaves = Object.keys(carroHyundai);
console.log(chaves);
console.log(carroHyundai.placa);

// Outras maneiras de criar propriedades em um objeto
Object.assign(carroHyundai, { 'placa1': 'XPL8Y92' });
// Cria um prototipo de objeto que então é herdado para o carroHyundai para não herda enumerabilidade do prototipo precisa usar defineProperty diretamente no objeto para enumerar.
Object.setPrototypeOf(carroHyundai, {
    placa2: 'MZQ3W84',
});
1 resposta

Oi Israel! Tudo bem?

Que legal que você está explorando métodos de objetos em JavaScript! Eu dei uma olhada no seu código e parece que você está no caminho certo, utilizando várias técnicas interessantes.

Se você está sentindo que o código está ficando grande, uma boa prática é modularizar seu código, separando funções em arquivos diferentes ou transformando partes do código em funções reutilizáveis. Isso pode ajudar a manter o código organizado e mais fácil de gerenciar.

Bons estudos!