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=0, elementos = condiciones.length; i<elementos; i++)
condiciones[i] = new Boolean( Math.round(Math.random()*1.5) );
function ejecutarPrueba(titulo, codigo) {
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=0, elementos = condiciones.length; i<elementos; i++)
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=0, elementos = condiciones.length, valorAcumulado = true; i<elementos && valorAcumulado==true; i++)
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.