Foros del Web » Programando para Internet » Javascript »

Almacenar productos en un array

Estas en el tema de Almacenar productos en un array en el foro de Javascript en Foros del Web. Hola, buenas tardes, Tengo la siguiente duda, les explico. Tengo 5 productos distintos: Producto A, B, C, D, E. y tengo que armar 3 paquetes ...
  #1 (permalink)  
Antiguo 13/11/2018, 11:56
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Almacenar productos en un array

Hola, buenas tardes,

Tengo la siguiente duda, les explico.

Tengo 5 productos distintos:

Producto A, B, C, D, E.

y tengo que armar 3 paquetes con esos productos, uno con 3 productos de los anteriores mencionados, otro con 5 y otro con 10.

Hasta ahí, no tengo ningún problema, todo bien con el siguiente código:

Código Javascript:
Ver original
  1. // Añadir productos a paquete
  2. // Definir que tipo de paquete es (3, 5, 10)
  3.  
  4.     var miPaquete = new Array();
  5.     var elemento;
  6.     var pUnidad = 0;
  7.    
  8.     function customPaqs(paq, id, producto){
  9.  
  10.         if(miPaquete.length < paq){
  11.  
  12.             miPaquete.push(producto);
  13.             document.getElementById("myAdds").innerHTML = miPaquete;
  14.            
  15.         } else { alert("Máximo de artículos permitidos."); }
  16.                
  17.     }

Este botón es con el qué los agrego a la función:

Código PHP:
<input type="button" name="add" onclick="customPaqs(<?php echo $kit ", " $rowSelectProductsPaq['id_producto'] . ", '" $rowSelectProductsPaq['prod_producto'] . "'"?>);" value="Add">
Siendo,

Código PHP:
$kit El paquete que voy a armar (35 o 10)
$rowSelectProductsPaq['id_producto'] = el identificador del producto
$rowSelectProductsPaq
['prod_producto'] = el nombre del producto 
Entonce, con esto agrego 3, 5 o 10 productos dependiendo el paquete que vaya a armar.

Ahora, necesito incorporar la siguiente regla:

En el paquete 3, ningún producto puede exceder más de 2 unidades por producto, es decir,

Paquete de 3 -> - No puedo tener 3 unidades de un mismo producto en este paquete. Máximo por unidad 2

Paquete de 5 -> No puedo tener 4 unidades de un mismo producto en este paquete. Máximo por unidad 3

Paquete de 10 -> No puedo tener 4 unidades de un mismo producto en este paquete. Máximo por unidad 3

Intenté usar la siguiente función para identificar cuántas veces se repite un producto en el arreglo

elemento = miPaquete.indexOf(id);

Código Javascript:
Ver original
  1. var miPaquete = new Array();
  2.     var repetido = 0;
  3.     var pUnidad = 0;
  4.    
  5.     function customPaqs(paq, id, producto){
  6.  
  7.         miPaquete.push(producto);
  8.         document.getElementById("myAdds").innerHTML = miPaquete;
  9.  
  10.         if(paq == 3){ pUnidad = 2; }
  11.         if(paq == 5){ pUnidad = 3; }
  12.         if(paq == 10){ pUnidad = 4; }
  13.  
  14.         if(miPaquete.length < paq){
  15.  
  16.    
  17.               for(var i = 0; i < miPaquete.length; i++){
  18.  
  19.                 if( miPaquete.indexOf(producto, i) === -1){
  20.  
  21.                     repetido = 0;
  22.                    
  23.                 } else if( miPaquete.indexOf(producto, i) > -1 ) {
  24.  
  25.                     repetido++;
  26.                 }
  27.             }
  28.  
  29.             alert("El producto " + producto + " se repite " + repetido + " veces en el array");
  30.        
  31.         } else { alert("Máximo de artículos permitidos."); }
  32.                
  33.     }

Sin embargo, no realiza la función correctamente, enviándome los siguientes mensajes:

Código:
Cuando agrego el primer producto, 

El A se repite 1 veces en el array

Cuando agrego el segundo producto, 

El producto C se repite 3 veces en el array
¿Saben en dónde estoy cometiendo el error?

De antemano, agradezco por sus comentarios. Sigo verificando.

Saludos!!
  #2 (permalink)  
Antiguo 14/11/2018, 09:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Almacenar productos en un array

Estás añadiendo a todos los productos en el mismo arreglo, sin hacer diferencias por el tipo de paquete. Ya que utilizas tres tipos de paquetes y puedes añadir a todos los tipos de producto, sería más fácil si utilizaras un arreglo para cada tipo de paquete e hicieras la comprobación por cada uno de acuerdo con el tipo de paquete al que está destinado cada producto.

Por cierto, si en el método .indexOf() colocas el índice como segundo argumento, la búsqueda empezará desde esa posición, ignorando si antes de ella ya existe el producto a buscar.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: almacenar, productos, tener
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:14.