Foros del Web » Programando para Internet » Javascript »

Buscar dos elementos en un array y mostrar las coincidencias

Estas en el tema de Buscar dos elementos en un array y mostrar las coincidencias en el foro de Javascript en Foros del Web. Hola, os cuento mi problema, tengo un array con varios elementos y un select con una serie de opciones y me he creado una búsqueda ...
  #1 (permalink)  
Antiguo 10/10/2014, 06:07
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 8 años, 7 meses
Puntos: 2
Buscar dos elementos en un array y mostrar las coincidencias

Hola, os cuento mi problema, tengo un array con varios elementos y un select con una serie de opciones y me he creado una búsqueda para que me busque un texto
introducido en un input, pero según la opción seleccionada en el select, o sea, que me busque dos elementos y me muestre las coincidencias, un elemento sería el que tengo seleccionado en el select y el otro el texto introducido a través de un input, por ejemplo, si en el select selecciono Informática y en el cuadro de texto pongo Manuel, pues me tiene que mostrar todos los que se llaman Manuel y además tienen informática.
Y lo que me ocurre es que me muestra primero, todos los que están incluidos en informatica y después todos los que se llaman Manuel, o sea, me busca primero por un campo y después por el otro, es como si me hiciera dos búsquedas.

Código Javascript:
Ver original
  1. function busqueda(){
  2.     var cadena=txtBuscar.value.toLowerCase();
  3.     var cadenaCurso = listaProv.options[listaProv.selectedIndex].value.toLowerCase();  
  4.        
  5.     var n = datos.length;  
  6.     buscarNombre = [];
  7.        
  8.     for (var i=0;i<n;i++)  
  9.     {
  10.         if (datos[i][0].toLowerCase().indexOf(cadenaCurso)>=0 && datos[i][1].toLowerCase().indexOf(cadena)>=0)      
  11.         {
  12.             buscarNombre.push(datos[i]);
  13.         }
  14.     }
  15.     txtResultados.innerHTML=buscarNombre.length;
  16.     mostrarResultados(0);      
  17. }
  #2 (permalink)  
Antiguo 10/10/2014, 14:00
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.545
Antigüedad: 10 años, 9 meses
Puntos: 972
Respuesta: Buscar dos elementos en un array y mostrar las coincidencias

Tengo un par de preguntas que hacerte:
  • ¿Cómo está constituido el arreglo datos?
  • ¿Qué es lo que hace la función mostrarResultados y por qué le pasas un cero como argumento?

Para que la búsqueda se realice de la manera en que deseas, tiene que haber algún tipo de asociación/relación entre los datos, tal y como se hace en las bases de datos. Quizá tengas que replantear lo que tienes hecho para obtener los resultados esperados.

Saludos
__________________
«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
  #3 (permalink)  
Antiguo 11/10/2014, 11:40
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Buscar dos elementos en un array y mostrar las coincidencias

Me imagino que algo así tendrá que ser, pero me ha despistado que las búsquedas funcionan, tanto por separado como buscando a través de los dos parámetros conjuntamente, pero en este caso primero me busca por uno y luego por otro y me aparecen los resultados uno a continuación del otro, así que la asociación, por lo menos entre los dos array existe, el problema es la asociación entre el texto del input y los options.
No sé, si el problema estará en que los options del select salen de otro array, distinto al de datos, pero eso no debería influir.
En el array del select como podrás ver más abajo, tengo por un lado, los values que se corresponden con el código que tengo metido en el array datos[i][0] y los text que están sólo en este array, entonces al pulsar en deporte por ejemplo, que es el 0101 y lo envio a través de cadenaCurso me busque este código en el array datos y si introduzco un texto, me busque el 0101 y entre todos los que tienen este código me busque también el texto.

Código Javascript:
Ver original
  1. // array Select
  2. var cursos = new Array();
  3. cursos = [['0101','Deporte'],
  4. ['0201','Informática']];
  5.  
  6. //array datos
  7. var datos = new Array();
  8. datos= [['0101','Manuel'],
  9. ['0101','Antonio'],
  10. ['0101','Juan'],
  11. ['0201','Juan'],
  12. ['0201','Antonio'],
  13. ['0201','Luis']];
  #4 (permalink)  
Antiguo 11/10/2014, 23:33
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.545
Antigüedad: 10 años, 9 meses
Puntos: 972
Respuesta: Buscar dos elementos en un array y mostrar las coincidencias

Supongamos que tenemos esta estructura:

Código HTML:
Ver original
  1. Ingrese el nombre:  <input type = "text" id = "nombre" />
  2.  
  3. Seleccione el curso:
  4. <select id = "curso">
  5.     <option value = "0101">Deporte</option>
  6.     <option value = "0201">Informática</option>
  7.  
  8. <button onclick = "buscar()">Buscar</button>

Si lo que buscas es que se muestren a todas las personas cuyo nombre coincida con el escrito en la caja de texto y lleven el curso que seleccionaste en el combo, puedes hacer algo como esto:

Código Javascript:
Ver original
  1. var input = document.querySelector("#nombre"),
  2.     select = document.querySelector("#curso"),
  3.     cursos = [
  4.         ['0101','Deporte'],
  5.         ['0201','Informática']
  6.     ],
  7.     datos = [
  8.         ['0101','Manuel'],
  9.         ['0101','Antonio'],
  10.         ['0101','Juan'],
  11.         ['0201','Juan'],
  12.         ['0201','Antonio'],
  13.         ['0201','Luis']
  14.     ],
  15.     buscar = function(){
  16.         var nombre = input.value,
  17.             curso = select.value,
  18.             nombreCurso = select.options[select.selectedIndex].innerHTML,
  19.             final = [];
  20.        
  21.         for (var i = 0, l = datos.length; i < l; i++)
  22.             if (datos[i][1] == nombre)
  23.                 for (var j = 0, m = cursos.length; j < m; j++)
  24.                     if (cursos[j][0] == curso && datos[i][0] == curso) 
  25.                         final.push(datos[i][1]);   
  26.        
  27.         return console.log(final.join(" y ") + (final.length > 1 ? " tienen " : " tiene ") + nombreCurso);
  28.     };

Primero, tomo a la caja de texto, al combo y declaro a los arrays que contienen a los arrays con los datos y una función que realizará la búsqueda. En la función, tomo el valor escrito en la caja, el valor seleccionado en el combo y el contenido del mismo, además, declaro un array en el que irán los datos que coincidan en la búsqueda.

Recorro al array con los arrays de los nombres de las personas. En cada iteración, verifico si el nombre del array actual en la iteración, coincide con el escrito en la caja de texto. De ser así, paso a recorrer al array que contiene a los arrays con los nombres de los cursos y, en cada iteración, verifico si el código del curso coincide con el seleccionado en el combo y si el código de la coincidencia encontrada en el primer bucle (el que itera al array datos), es igual al curso seleccionado. De cumplirse todo esto, inserto el nombre de la persona en el array final y una vez que termine la búsqueda, retorno a los datos encontrados, mostrándolos en consola.

Por ejemplo, si busco a 'Juan' y selecciono 'Deporte', al haber dos personas con el nombre 'Juan' pero solo una de ellas lleva 'Deporte', el mensaje que se muestre será así:

Código Consola:
Ver original
  1. Juan tiene Deporte

Ahora que, si deseas, para saber de qué Juan se trata, podrías mostrar también el código del curso que le asignaste.

Saludos
__________________
«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
  #5 (permalink)  
Antiguo 13/10/2014, 06:28
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Buscar dos elementos en un array y mostrar las coincidencias

He modificado algo tu código para adaptarlo al mío, pero no funciona, he incluído también un código para que haga la búsqueda sólo por la caja de texto, o sólo por el select y por estas dos búsquedas funciona perfectamente, pero cuando busco por el texto y el select conjuntamente, me aparece el nombre buscado siempre, da igual lo que haya seleccionado en el select, es como si sólo buscara por texto.

Código Javascript:
Ver original
  1. function busqueda(){
  2.     var textoBusqueda = 'Ingresar texto de b\u00fasqueda';
  3.     var cadena=txtBuscar.value.toLowerCase();
  4.     //Esto viene de un select que creo dinámicamente utilizando el array cursos
  5.     var cadenaCursos = listaCursos.options[listaCursos.selectedIndex].value.toLowerCase(); 
  6.     var datosCursos = datos[i][0].toLowerCase().indexOf(cadenaCursos)>=0;  
  7.     var n = datos.length;  
  8.     buscarNombre = []; 
  9.        
  10.     for (var i=0;i<n;i++)  
  11.     {
  12.     buscaren = reemplazaAcentos(datos[i][1])
  13.     txtBuscado = reemplazaAcentos(cadena)
  14.     //Para buscar utilizando la caja de texto sólo 
  15.         if (buscaren.toLowerCase().indexOf(txtBuscado)>=0)
  16.         {
  17.             buscarNombre.push(datos[i]);
  18.         }
  19.     //Para buscar utilizando el select sólo
  20.         else if (datos[i][0].toLowerCase().indexOf(cadenaCat)>=0 && txtBuscar.value == textoBusqueda )
  21.         {
  22.             buscarNombre.push(datos[i]);
  23.         }        
  24.     //Para hacer la búsqueda con un texto en la caja y una opcion seleccionada en el select
  25.         else if (datos[i][1] == buscaren.toLowerCase().indexOf(txtBuscado)>=0)
  26.                  
  27.                 for(j=0;j<cursos.length;j++){
  28.                    
  29.                     if(datosCursos == cadenaCursos && cursos[j][0]==cadenaCursos)                  
  30.                     buscarNombre.push(datos[i]);                   
  31.                        
  32.             }
  33.     }
  34.     txtResultados.innerHTML=buscarNombre.length;
  35.     mostrarResultados(0);          
  36. }
  #6 (permalink)  
Antiguo 14/10/2014, 02:08
 
Fecha de Ingreso: enero-2014
Mensajes: 91
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Buscar dos elementos en un array y mostrar las coincidencias

En el primer if le he añadido && datosCursos y el último else if también lo he modificado, el resto lo he dejado igual y ahora ya si me hace la búsqueda correctamente, tanto buscando por texto sólo, como por las opciones del select, no se si es la forma más ortodoxa de hacerlo o hay otra pero funciona, no sé si más adelante, si decido añadirle algún otro select me dará problemas o funcionará perfectamente.
Pues así ha quedado el código.

Código Javascript:
Ver original
  1. //Para buscar utilizando la caja de texto sólo o por el select
  2.         if (buscaren.toLowerCase().indexOf(txtBuscado)>=0 && datosCursos)
  3.         {
  4.             buscarNombre.push(datos[i]);
  5.         }
  6.     //Para buscar utilizando el select sólo
  7.         else if (datos[i][0].toLowerCase().indexOf(cadenaCursos)>=0 && txtBuscar.value == textoBusqueda )
  8.         {
  9.             buscarNombre.push(datos[i]);
  10.         }        
  11.     //Para hacer la búsqueda con un texto en la caja y una opcion seleccionada en el select
  12.         else if (buscaren.toLowerCase().indexOf(txtBuscado)>=0)
  13.                  
  14.                 for(j=0;j<cursos.length;j++){
  15.                    
  16.                     if(datosCursos == cadenaCursos && cursos[j][0]==cadenaCursos)                  
  17.                     buscarNombre.push(datos[i]);                    
  18.                        
  19.             }
  20.     }

Última edición por pedromir; 14/10/2014 a las 06:03

Etiquetas: coincidencias, elementos, html, input, select
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 20:03.