estoy seguro que mas de uno alguna vez hemos usado los benditos bucles anidados por alguna razon pero principalmente porque se requiere recorrer dos estructuras. personalmente a mi me irrita ver bucles anidados, pero no porque sean inneficientes sino porque esteticamente no son atractivos. en ciertos casos particulares no hay otra opcion que recurrir a dicha estructura, por ejemplo cuando se intenta interrumpir el ciclo con break/continue en un bucle externo. de todos modos, me refiero por ejemplo el siguiente bucle anidado.
Código:
for(var i = 0, a = ["blanco", "gris", "marron", "amarillo"];
i < a.length; i++){
for(var j = 0, b = ["gato", "ganado", "caballo", "perro", "gallo"]; j < b.length; j++) document.write(b[j], " ", a[i], "<br />");
}
estaba pensando si habia alguna forma de hacer lo mismo pero con un solo bucle. no me sorprenderia si alguien alguna vez [en la web o en mundo de desarrollo] ya habia propuesto un cuestionamiento similar con alguna solucion. intente buscar pero no se si tiene algun nombre particular que desconozco. en fin, este es el mismo ejemplo pero con un solo bucle.
Código:
for(var i = 0, j = 0, a = ["blanco", "gris", "marron", "amarillo"], b = ["gato", "ganado", "caballo", "perro", "gallo"];
j < b.length;
j+= Math.floor(++i/a.length), i%= a.length) document.write(b[j], " ", a[i], "<br />");
lo cierto es que es un tanto esoterico para los que no estamos acostumbrados a expresiones complejas en un bucle. adicional, lo mas seguro en la practica nadie se acordara la logica que esconde. el ejemplo simula hasta solo dos bucles; mas de dos no lo intente porque en la practica rara vez he visto la necesidad de tres bucles anidados. intente hacerlo lo mas simplicado que me permite mi torpe cabeza en calculos. estoy seguro que debe haber alguna otra forma mas simplificada aun, pero aun no alcanzo ese nivel. en lugar de explicarle, se los dejo para que lo analicen porque la verdad no sabria por donde comenzar a explicarlo sin complicarlo.