Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda