Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/02/2012, 18:12
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, 7 meses
Puntos: 1485
Respuesta: Al recorrer el array no trae los datos duplicados

buenas, que tal gente!

un detalle interesante que desconocia. como ha indicado @isabelm, el error sucede porque la expresión regular es global. pero en realidad la situación se da por otro factor adicional. el método test es como exec en cuanto a comportamiento con la diferencia que uno devuelve un boolean y el otro un array. cuando una expresión es global, dichos métodos alteran la propiedad lastIndex el cual es un integer que indica en que posición del string fue la última comprobación que realizó la expresión. la segunda vez que se vuelve a invocar el método, en lugar comenzar desde el inicio del string, parte desde el índice. en todo caso, no tiene sentido realizar una busqueda global con el método test.

para que se entienda la situación... ¿que hubiera pasado si el string del segundo array hubiera sido "Vega Baja Bar & Grill" y la búsqueda es por la B? lo que sucede es que la primera vez que se hace un test de la expresion regular sobre el string "Vega Baja MXK 1", la expresión encuentra la primera "B", y cambia la propiedad lastIndex de la expresión (variable patt) al valor 6. luego, en el segundo string ("Vega Baja Bar & Grill") la búsqueda inicia desde el índice 6. desde ese punto en adelante se encuentra la próxima "B". por tanto, el resultado es que se muestran ambos enlaces.

cuando la expresión no es global, el índice siempre se mantiene en 0, de modo que la búsqueda siempre comienza desde el inicio del string. nótese que ese comportamiento sólo sucede con los métodos test y exec cuando la expresión es global -hasta donde tengo conocimiento.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.