| ||||
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:
Saludos 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; } y ¡Felicidades!
__________________ Por favor: No hagan preguntas de temas de foros en mensajes privados... no las respondo |
| ||||
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, |
| ||||
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:
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.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; } 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 |
| ||||
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 |