Ver Mensaje Individual
  #10 (permalink)  
Antiguo 08/01/2008, 17:15
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: Funcion similiar a in_array pero en javascript.

Hola caricatos:

Qué pena que me perdiera ese hilo, seguro que habría podido aportar algo interesante. Está completísima la lista de funciones.

Para búsqueda por conversión a cadena que tú comentas ya se me había pasado por la cabeza muchas veces, y la verdad: Da muchos problemas, nunca he llegado a una versión que valga para todos los casos (si es con números es muy fácil). De hecho he fabricado esta función para el ejemplo (creo que indexOf() es ligeramente más rápida que test()):

Código PHP:
Array.prototype.in_array=function(elem){
    
//return new RegExp("#"+elem+"#","").test( "#"+this.join("#")+"#" );
    
return ("#"+this.join("#")+"#").indexOf("#"+elem+"#") > -1;

Para las búsquedas de antes me ha salido:
Código PHP:
Existefalsehe tardado 2944ms en buscarlo.
Existefalsehe tardado 3145ms en buscarlo.
Existefalsehe tardado 3064ms en buscarlo.
Existefalsehe tardado 3045ms en buscarlo.
Existefalsehe tardado 3034ms en buscarlo.
Existefalsehe tardado 3185ms en buscarlo
Así que funciona, pero sigue siendo un poco lento...



He leido los dos post por encima, no sé si faltan dos funciones que echo de menos: array1.esIgual(array2); que devuelve true si cada elemento del array1 es igual al correspondiente de array2; y array1.copia(); que en algún script he necesitado hacer alguna copia de un array para hacer cambios sin tocar el original, o para entregar a una función un duplicado. No me atrevo a revivir el hilo Lo postearé aquí:

Código PHP:
Array.prototype.esIgual = function(arr2) {
    if( 
this.length === arr2.length ) {
        for(var 
i=0i<arr2.lengthi++)
            if( 
this[i] !== arr2[i] )
                return 
false;
        return 
true;
    }
    else return 
false;
}

Array.
prototype.copia = function() {
    return [].
concat(this);

Las he hecho de cabeza, espero que estén bien.


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.