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: 777
Antigüedad: 13 años, 7 meses
Puntos: 22
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
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.427
Antigüedad: 7 años, 1 mes
Puntos: 928
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.

__________________
«Laissez faire et laissez passer, le monde va de lui même»



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