Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

181
Visualizações
Algoritmo de Javascript a utilizar para aplicar múltiples descuentos en un evento de ventas promocionales

Tenemos un evento de ventas promocionales en nuestra tienda que es si compras 1 teclado, obtienes un 20 % de descuento, si compras 2 teclados, obtienes un 30 % de descuento, si compras 3 teclados, obtienes un 40 % de descuento. Dado que el precio del producto del teclado es de USD 199,99. Hay un límite máximo de solo 6 teclados donde puede aplicar descuento, si compra más que eso, no se aplicarán más descuentos adicionales.

¿Alguien puede ayudarme a crear un algoritmo para aplicar el descuento y calcular el monto total si el cliente compra de 1 a 6 o más de este producto específico?

 Buy 1 Keyboard = 20% discount Buy 2 Keyboards = 30% discount Buy 3 Keyboards = 40% discount

Este fue el primer código que traté de resolver nuestro problema, pero estaba obteniendo resultados incorrectos:

 let cart = []; let disc_amount; let total_amount; discFor1 = 0.2; discFor2 = 0.3; discFor3 = 0.4; discFor4 = 0.6; discFor5 = 0.7; discFor6 = 0.8; const keyboard = { id: "1001", name: "Yamaha PSR-E273 Keyboard", reg_price: 199.99, disc_price: 0 }; const addKeyboardToCart = () => { cart.push(keyboard); }; const getDiscount = (cart) => { if (cart.length < 1) { console.log("Please add an item"); } if (cart.length === 1) { disc_amount = keyboard.reg_price * discFor1; } else if (cart.length === 2) { disc_amount = keyboard.reg_price * discFor2; } else if (cart.length === 3) { disc_amount = keyboard.reg_price * discFor3; } else if (cart.length === 4) { disc_amount = keyboard.reg_price * discFor4; } else if (cart.length === 5) { disc_amount = keyboard.reg_price * discFor5; } else if (cart.length === 6) { disc_amount = keyboard.reg_price * discFor6; } else if (cart.length > 6) { disc_amount = keyboard.reg_price * discFor6; } return disc_amount; }; const getTotalAmount = (disc_amount, cart) => { let total_reg_price_amount = 0; for (let i = 0; i < cart.length; i++) { total_reg_price_amount += cart[i].reg_price; } total_amount = total_reg_price_amount - disc_amount; return total_amount; }; addKeyboardToCart(); addKeyboardToCart(); addKeyboardToCart(); addKeyboardToCart(); addKeyboardToCart(); addKeyboardToCart(); getDiscount(cart); getTotalAmount(disc_amount, cart);

Editar: también estoy tratando de implementar cómo obtener el mejor descuento para el cliente, por eso estoy tratando de aplicar el descuento dinámicamente en lugar de codificar el monto del descuento para cada número de artículos pedidos.

Editar: revisé mi pregunta y eliminé preguntas adicionales para que las respuestas puedan enfocarse más en un problema específico.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Simplifiqué un poco el problema pero mantuve la misma lógica que estabas siguiendo:

También agregué una pequeña función de prueba para probar la función en todos los casos que desee. Ya agregué algunos. Puedes añadir más si quieres.

Editado para agregar: cómo calcular el precio total y también agregar más casos de prueba

 keyboard = { reg_price: 200 } const discFor1 = 0.20 const discFor2 = 0.30 const discFor3 = 0.40 const getDiscount = (cart_length) => { switch ( cart_length ) { case 1 : return keyboard.reg_price * discFor1; case 2 : return keyboard.reg_price * 2 * discFor2; case 3 : return keyboard.reg_price * 3 * discFor3; case 4 : return keyboard.reg_price * 3 * discFor3 + keyboard.reg_price * discFor1; case 5 : return keyboard.reg_price * 3 * discFor3 + keyboard.reg_price * 2 * discFor2; default : return keyboard.reg_price * 6 * discFor3; } }; const getTotalAmount = (cart) => { if (cart.length == 0) { console.log("Please add an item") return; } total_amount = cart.length * keyboard.reg_price - getDiscount(cart.length); return total_amount; }; const test = ( cart, ans ) => { if ( getTotalAmount(cart) !== ans) { console.log(`Error: expected ${ans}, received ${getTotalAmount(cart)}`) } else { console.log(`Success: expected ${ans}, received ${getTotalAmount(cart)}`) } } test([], undefined) test(["keybd"], 200 - 40) test(["keybd", "keybd"], 400 - 120) test(["keybd", "keybd", "keybd"], 600 - 240) test(["keybd", "keybd", "keybd", "keybd"], 800 - 280) test(["keybd", "keybd", "keybd", "keybd", "keybd"], 1000 - 360) test(["keybd", "keybd", "keybd", "keybd", "keybd", "keybd"], 1200 - 480) test(["keybd", "keybd", "keybd", "keybd", "keybd", "keybd", "keybd"], 1400 - 480) test(["keybd", "keybd", "keybd", "keybd", "keybd", "keybd", "keybd", "keybd"], 1600 - 480)
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda