Ver Mensaje Individual
  #16 (permalink)  
Antiguo 19/04/2008, 12:29
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: Me conviene usar eval aca ?

Para los máximos igual abrimos otro tema y proponemos diferentes soluciones allí, que si no me enrollo y aquí estamos para hablar de boleanos. Habría que probar diferentes sistemas y hacer una prueba como la que he hecho antes.

Código PHP:
var condiciones = new Array(60000);
// relleno el array
for(var i=0elementos condiciones.lengthi<elementosi++)
    
condiciones[i] = new BooleanMath.round(Math.random()*1.5) );

function 
ejecutarPrueba(titulocodigo) {
    var 
ini = new Date().getTime();
    var 
resultado codigo();
    var 
tardanza = (new Date().getTime())-ini;
    
document.write("Según <b>"+titulo+"</b> el resultado es <b>"+resultado+"</b> y ha tardado en sacarlo "+tardanza+" ms.<br/>");
}


ejecutarPrueba"Con bucle y devolviendo false si hay false", function() {
        for(var 
i=0elementos condiciones.lengthi<elementosi++)
            if( 
condiciones[i] == false )
                return 
false;
        return 
true;
    } 
);

ejecutarPrueba"Con indexOf y mirando si existe \"false\" ", function() {
        return 
condiciones.toString().indexOf("false") > -1;
    }
);

/*
// Me da error: Too much recursion ¿?
ejecutarPrueba( "Con eval y juntando todo el array con &&", function() {
        return eval("new Boolean( "+condiciones.join(" && ")+ ")");
    }
);
*/

ejecutarPrueba("Con bucle y haciendo valorAcumulado = valorAcumulado && actual", function() {
        for(var 
i=0elementos condiciones.lengthvalorAcumulado truei<elementos && valorAcumulado==truei++)
            
valorAcumulado valorAcumulado && condiciones[i];
        return 
valorAcumulado;
    }
); 
Los resultados:
Cita:
Iniciado por IE6
Según Con bucle y devolviendo false si hay false el resultado es false y ha tardado en sacarlo 0 ms.
Según Con indexOf y mirando si existe "false" el resultado es true y ha tardado en sacarlo 328 ms.
Según Con bucle y haciendo valorAcumulado = valorAcumulado && actual el resultado es false y ha tardado en sacarlo 0 ms.
Cita:
Iniciado por FF2
Según Con bucle y devolviendo false si hay false el resultado es false y ha tardado en sacarlo 0 ms.
Según Con indexOf y mirando si existe "false" el resultado es true y ha tardado en sacarlo 516 ms.
Según Con bucle y haciendo valorAcumulado = valorAcumulado && actual el resultado es false y ha tardado en sacarlo 0 ms.
Bueno, salta a la vista que los resultados dependen también del array: Si tenemos 1000 elementos true y el último es false no habrá mucha diferencia. Pero si los tenemos muy mezclados, como en el ejemplo, y en cuanto encontremos un false paramos, la búsqueda se hace muy fácil.


En el caso general lo mejor es buscar uno a uno, y en cuanto encontremos un false parar. Esas son mis conclusiones.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.