Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

186
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!