Foros del Web » Programando para Internet » Javascript »

manejo de arreglos desiguales

Estas en el tema de manejo de arreglos desiguales en el foro de Javascript en Foros del Web. Hola!! Estoy algo confundida con el manejo de arreglos, a ver si me pueden dar un poco de luz en el tema. supongamos que tengo ...
  #1 (permalink)  
Antiguo 22/10/2012, 18:48
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
manejo de arreglos desiguales

Hola!!

Estoy algo confundida con el manejo de arreglos, a ver si me pueden dar un poco de luz en el tema.

supongamos que tengo estos arreglos:

array1 {1}
array2 {1,2,3,}

ahora tengo este codigo para compararlos:

Código Javascript:
Ver original
  1. for(i=0;i<=3;i++){
  2.     if(array1[i]==array2[i]){
  3.         alert("a1 "+array1[i]+" a2 "+array2[i]);
  4.         $('#checkbox'+i).attr('checked',true);                  
  5.     }
  6. }

en este ejemplo el alert imprime:

a1 1 a2 1
a1 undefined a2 undefined

si tengo:

array1 {1,2}
array2 {1,2,3,}

el alert:

a1 1 a2 1
a1 2 a2 2
a1 undefined a2 undefined

bueno pues lo que quiero es que me recorra el arreglo normal, no se porque sale undefined si al menos en el en el array2 si tiene valor

necesito hacer un checked cuando encuentre coincidencia, lo que note es que cuando en el array1 la secuencia es normal, es decir 1,2,3 todo bien, pero cuando ya no es secuencia ni del mismo largo que el array2 ya no se cumple el bucle

tambien por ejemplo si tengo:

array1 {2}
array2 {1,2,3,}

el alert:

a1 undefined a2 undefined

y necesito que llegue a hacer el ciclo completo ya que si hay una coincidencia despues



ayuda porfas
  #2 (permalink)  
Antiguo 22/10/2012, 19:18
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: manejo de arreglos desiguales

buenas...
el asunto es el siguiente. primero nótese que estás comparando por posiciones del array. es decir, índice 0 con índice 0, índice 1 con índice 1, etc. en el primer ejemplo, obtienes el alert a1 1 a2 2 y a1 undefined a2 undefined. el primero es obvio, estás comparando índice 0 con índice 0. el segundo, te da undefined porque estás comparando dos posiciones del array que no existen en ninguno. de modo que automáticamente cualquier índice que no existe en el array devolverá undefined. si lo vemos ciclo por ciclo con los arrays array1 [1] y array2 [1,2,3,], la comparación es como sigue:
Código:
index      array1    array2
    0           1 == 1          (se muestra en el alert)
    1   undefined != 2
    2   undefined != 3
    3   undefined == undefined  (se muestra en el alert)
entonces, ¿por qué se muestra el segundo alert? porque tu bucle va de 0 a 3, lo cual es una lontigud equivocada. tienes que cambiar la longitud o el operador de comparación. fíjate que tienes menor o igual (<=).

el otro caso es cuando tienes un array tal que array1 [2], array2 [1,2,3]. si haces la corrección anterior —el operador o la lontigud— no deberías ver ningún alert, de nuevo, porque estás comparando por posiciones del array.
Código:
index      array1    array2
    0           2 != 1
    1   undefined != 2
    2   undefined != 3
no estoy muy claro en lo que quieres hacer. si determinar si un elemento existe en el otro array o si comparar por posiciones. si es la primera premisa, entonces básicamente tendrías que hacer dos bucles, uno dentro del otro. un bucle para recorrer un array y otro bucle para recorrer el segundo array y evaluar la existencia de los valores.
Código:
var array1 = [8,1,0], array2 = [2,9,8,0];
for (var i = 0, len1 = array1.length; i < len1; i++){
  for (var j = 0, len2 = array2.length; j < len2; j++){
  if (array1[i] == array2[j]) console.log("array1: ", i, ", array2: ", j, " -> ", array1[i]);
  }
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 23/10/2012 a las 22:13
  #3 (permalink)  
Antiguo 23/10/2012, 07:40
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: manejo de arreglos desiguales

:3 muchas gracias zerokilled

le agregue el segundo bucle y funciona bien, parece

Código Javascript:
Ver original
  1. for(i=0;i<3;i++){
  2.     for(j=0;j<array1.length;j++){
  3.         if(array1[j]==array2[i]){
  4.             //alert("a1 "+array1[i]+" a2 "+array2[i]);
  5.             $('#checkbox'+i).attr('checked',true);
  6.         }
  7.     }
  8. }

en el segundo for comparo cada valor el array1 (que normalmente es el que tendrá menos valores que el array2) primero por la primer posición del array2 y así sucesivamente

y bueno parece ser que ya hace lo que quiero XD

gracias!!

Etiquetas: arreglos, manejo
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 01:25.