Hola, estoy haciendo una web y quiero mostrar un anuncio de acuerdo a sus visitas en ella. Me explico: si el usuario navega y da con la página del producto de fibra óptica "fibra", se ejecuta este script, añade un valor en localStorage, para ser exactos el siguiente:
fibra = localStorage.getItem("c_fibra"); // get a numeric value from str_count, put it in count if (fibra == null || fibra == "null") { count = 0; } else { count = parseInt(fibra); } // increment count count++; // display count // store count localStorage.setItem("c_fibra", count);
Con esto vendría siendo un contador de visitas para esa página. Así sucesivamente en otros productos, (fibra óptica, cables, alambres etc..) cada uno con su respectivo local storage y su contador.
Luego en su página de bienvenida quiero que de acuerdo a sus visitas, se muestre determinado anuncio, y que muestre el que mayor número tenga. Si el cliente visitó muchas veces fibra, más veces que cables, se ejecute cierto código, que muestre anuncios y descuentos de fibra óptica.
Mi código es funcional hasta cierto paso me atoré:
- cables= 5 visitas
- fibra = 15 visitas
- producto 3 = 11 visitas
Pensé que la solucion era guardar en un array esos valores y con una función saco el valor máximo de esos enteros. Anexo mi código:
aereo = parseInt(localStorage.getItem("c_aereo")); fibra = parseInt(localStorage.getItem("c_fibra")); cobre = parseInt(localStorage.getItem("c_cobre")); // Recojo los valores que se hayan generado // estructura if, funciona si quiero ejecutar publicidad de uno o de otro, // pero si son 10 productos? if (fibra > aereo) { alert("Fibra es mayor que aereo"); } else { alert("Aereo es mayor que fibra"); } // Pensé que la solución era guardar esos datos en un array y luego desplegar el // valor máximo, pero me devuelve valor entero, y no sé a cual pudiera corresponder var values = [fibra,aereo,cobre], max = 0; for(var i=0,len=values.length;i<len;i++) { if(max < values[i]) { max = values[i]; } } alert(max);
Saludos y muchas gracias a las personas que ayudan.
Respuestas
Como tú mismo dices, la solución basada en la estructura if
es muy poco eficiente, ya que no va a adaptarse bien cuando tengas 10 o más productos.
De nuevo tu mismo das la que parece la mejor solución: guardar los datos en un array asociativo y luego extraer el mayor valor. Para ello tendrías que usar un código como el siguiente para guardar la información:
var contadores = { 'fibra': 0, 'cobre': 0, '...': 0, }; // ... contadores['fibra'] += 1;
Y para obtener el elemento del array con un valor más grande, tendrías que usar código JavaScript, ya que creo que no hay ninguna función nativa que lo haga por ti:
var valorMasGrande = -1; var elementoMasGrande = null; for (var i in contadores) { if (contadores[i] > valorMasGrande) { valorMasGrande = contadores[i] elementoMasGrande = i; } }
@javiereguiluz
Hola Javier, muchisimas gracias! me ha funcionado el código que me mostraste, soy muy, pero muy novato en javascript y no conocía los arrays asociativos.
Gracias por la ayuda de siempre que brindan esta página.
saludos
@resback