Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Dúvida] preciso de ajuda para melhorar o projeto

Bom dia galera, preciso de ajuda para melhorar o projeto, abaixo vou deixar as duvidas e as situações que estão ocorrendo, tentei resolver no código, porém não consegui.

link do projeto no github: https://github.com/LuDesigner/carrinho-de-compras/tree/main

  1. Números quebrados não são aceitos, eles aparecem como NaN, gostaria de resolver isso.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  1. Aqui tem mais de uma situação que gostaria de resolver, no carrinho esta entrando valores após o zero e com 0.valor, fazendo o preço quebrar, como se fosse porcentagem, além de não esta somando ao produto, por exemplo compro 1 unidade do mesmo produto e aparece separado em vez de 2xproduto, como posso resolver isso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  1. A terceira situação é que quando coloco o "." nos valores para por as 2 casas após a virgula o calculo sai errado com muitas casas decimais quebradas, como o exemplo abaixo, como posso resolver isso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

6 respostas

Oi Luis!

Olhei o seu projeto e verifiquei que o primeiro item já foi resolvido, pois não está mais aparecendo NaN.

O terceiro ítem, das casas decimais, é por conta de algumas variáveis não terem sido convertidas para números. Basta você utilizar a função parseFloat para forçar o JavaScript a tratar as variáveis como sendo do tipo número ao invés de String (texto):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O segundo ítem é o mais complicado, pois você vai precisar escrever uma lógica para guardar todos os produtos que já foram adicionados no carrinho e quando um novo produto for adicionado, deve primeiro verificar se ele já estava no carrinho e incrementar a quantidade e o preço. É um bom desafio para você tentar aplicar os conhecimentos de lógica de programação ;)

Tente fazer sozinho, mesmo que não consiga finalizar ou encontre problemas, e mande aqui que vamos te ajudando.

Bons estudos!

Boa tarde Rodrigo, o parseFloat foi de grande ajuda, vou conseguir aplicar ele em outros projetos, o do desafio estava aplicando o código .toFixed(2) por exemplo um deles abaixo:

// resolver número quebrado
function dolar(){
    let dolar1 = prompt('Qual a valor em Real? (informe somente número e use "." nos valores décimais)');
    let dolar2 = prompt('Qual o valor do Cambio? (informe somente número e use "." nos valores décimais)');

    if(isNaN(dolar1) || isNaN(dolar2)){
        exibirTextoNaTela('p', 'Número inválido ou campo vazio, tente novamente');
    } else {
        let resultadoDolar = (dolar1 * dolar2);
        exibirTextoNaTela('p', `A conversão é de R$ ${resultadoDolar.toFixed(2)}`);
    }
}

sobre o desafio de fazer sozinho, acredito que não vou conseguir resolver no momento, eu estou a 1 mês e 15 dias estudando a lógica de programação e tem muita coisa nova que não conheço que acaba sendo solução das atividades que foram ensinadas, mas que acaba faltando algo ou dando algum problema, no momento atual eu preciso muito da ajuda e suporte de vocês, porque na solução ou resolução consigo entender o que foi realizado, ou que pelo menos me informe o caminho, o que tem ocorrido muito comigo é como resolver um problema com soluções que não estudei ainda, se poder me ajudar com a terceira situação fico agradecido.

Entendo Luis! Eu vou gravar um vídeo fazendo o passo a passo da solução e explicando.

Te mando assim que possível ;)

Bom dia, muito obrigado Rodrigo, isso vai me ajudar bastante, enquanto ainda aprendo é tudo muito novo e fico super perdido, mas acredito que com dedicação e tempo, consiga resolver melhor os desafios, mas neste momento estou realmente precisando de muita ajuda e orientação

solução!

Segue o vídeo: https://youtu.be/C6PgY2IyIys

Código final do arquivo app.js:

let totalGeral = 0;
let carrinhoDeCompras = [];
limpar();

function adicionar() {
    let produto = document.getElementById('produto').value;
    let quantidade = parseInt(document.getElementById('quantidade').value);

    if (!produto || produto.trim() === "") {
        alert("Selecione um produto válido.");
        return;
    }

    if (isNaN(quantidade) || quantidade <= 0) {
        alert("Insira uma quantidade válida.");
         return;
    }

    let nomeProduto = produto.split('-')[0];
    let valorUnitario = parseFloat(produto.split('R$')[1]);
    let preco = parseFloat(quantidade * valorUnitario);

    let produtoJaAdicionado = carrinhoDeCompras.find(p => p.nome == nomeProduto);
    if (produtoJaAdicionado) {
        produtoJaAdicionado.quantidade += quantidade;
        produtoJaAdicionado.valor = produtoJaAdicionado.valor + preco;
    } else {
        let produto = {
            nome: nomeProduto,
            quantidade: quantidade,
            valor: preco
        };

        carrinhoDeCompras.push(produto);
    }
    
    let lista = document.getElementById('lista-produtos');
    lista.innerHTML = '';

    carrinhoDeCompras.forEach(p => {
        lista.innerHTML = lista.innerHTML + `<section class="carrinho__produtos__produto">
            <span class="texto-azul">${p.quantidade}x</span> ${p.nome} <span class="texto-azul">R$${p.valor.toFixed(2)}</span>
        </section>`;
    });
        
    totalGeral = parseFloat(totalGeral + preco);
    let campoTotal = document.getElementById('valor-total');
    campoTotal.textContent = `R$ ${totalGeral.toFixed(2)}`;
    document.getElementById('quantidade').value = 0;
}

function limpar() {
    totalGeral = 0;
    carrinhoDeCompras = [];
    document.getElementById('lista-produtos').innerHTML = '';
    document.getElementById('valor-total').textContent = 'R$ 0'
}

Show, vou dar uma olhada agora mesmo e estudar as mudanças