Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/10/2012, 19:18
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 10 meses
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