Foros del Web » Programando para Internet » Javascript »

en array

Estas en el tema de en array en el foro de Javascript en Foros del Web. hay una funcion, que devuelva true o false, segun sea el caso, si una palabra esta en un array, como en php, in_array(), gracias...
  #1 (permalink)  
Antiguo 27/12/2004, 19:41
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 21 años, 4 meses
Puntos: 0
en array

hay una funcion, que devuelva true o false, segun sea el caso, si una palabra esta en un array, como en php, in_array(), gracias
__________________

la vida es bella cuando no es culera
  #2 (permalink)  
Antiguo 28/12/2004, 02:38
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola sdf23

En este mismo foro hay un par de mensajes de caricatos y furoya, entre otros (¡Hola a todos! ) que tratan sobre los arrays. No se si ya habrán puesto algo sobre tu pregunta, pero me apetecía teclear un poco de código y esto es lo que ha salido. A ver si te sirve:
Código HTML:
Array.prototype.in_array=function(it) {
  for(i=0;i<this.length;i++)
	  if(this[i]==it) return true;
	return false;
}
cadena=['a','b','c'];
if (cadena.in_array('b'))
  alert('está');
Saludos,
  #3 (permalink)  
Antiguo 28/12/2004, 02:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola sdf23:

Veo que se me ha adelantado JavierB (¡Hola !)
Aunque te voy a poner una variante que devuelva -1 si no existe y su ubicación dentro del array en el caso contrario:

Código:
Array.prototype.buscar = function(esto)	{
	var yo = this;
	for (var i = 0, mayor = yo.length - 1; i < mayor; i ++)
		if (yo[i] == esto) return i;
	return -1;
}
Saludos
y ¡Felicidades!
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 28/12/2004, 02:47
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Muy buena idea caricatos. Ya me imaginaba yo que en cuanto vieras el mensaje sobre arrays aportarías tus conocimientos sobre el tema. Lo que no entiendo es por qué usas la variable mayor

Saludos,
  #5 (permalink)  
Antiguo 28/12/2004, 03:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Antes de contestar a JavierB, pondré otra variante del método buscar para obtener la posición de la última coincidencia, que simplemente recorre el array comenzando desde el final:

Código:
Array.prototype.buscarUltimo = function(esto)	{
	var yo = this;
	for (var i = yo.length - 1; i >= 0; i --)
		if (yo[i] == esto) return i;
	return -1;
}
La intención de buscar el último, creo que puede ser útil para implementar acotaciones en arrays... Pero es algo complejo de explicar, aunque en el mensaje que mencionas trataré de hacerlo.

Ahora contestaré lo de el uso de la variable "mayor".
Aunque en este método no es algo necesario ya que la longitud del array no varía en el bucle, es una costumbre que he adquirido para intentar optimizar código.
Si la longitud del array variase en el bucle, podría no llegar al índice que yo quiero (pero no es el caso).
En un artículo que leí en una revista sobre optimización de código en php, recomiendan crear la variable mayor de esta manera, ya que no existe en php la propiedad length, y sí la función count(), y resulta que por cada paso del bucle for se llama a esa función y en grandes cantidades de datos (tampoco es el caso) se ejecutaría el bucle en más del doble del tiempo.
En javascript, si en vez de usar length, tienes que hacer uso de una función en la incrementación del bucle, también ocurriría (te puedo asegurar que lo he probado). Así que me estoy acostumbrando a realizar los bucles de esta manera.

No sé si me expliqué bien (espero que sí)

Bueno ¡Felicidades!
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 28/12/2004, 06:22
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

Te has explicado bien, caricatos, creo que he "pillado" la idea general.

Saludos,
  #7 (permalink)  
Antiguo 28/12/2004, 10:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

He descubierto un error en el valor de mayor, y es que debe inicializarse con yo.length o la condición de finalización del bucke cambiarla: i <= mayor;

Con lo de los bucles, lo mejor es que se trate de un valor "constante" y nunca de un valor "calculado"...

Un ejemplo sería:

for (var i = 0; i < document.getElementsByTagName("img").length; i ++)
...
En este caso, por cada iteración del bucle, se genera el array de elementos "img" de la página... y luego se obtiene la propiedad length...

Una implementación mejor sería:
for (var i = 0, imagenes = document.getElementsByTagName("img"); i < imagenes.length; i ++)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 07:54.