Podrías hacerlo así:
Código Javascript
:
Ver originalvar a = ['M', 'F'],
b = ['Pobre', 'Rico', 'Medio'],
c = ['Lima', 'Chiclayo', 'Trujillo'];
(function(x, y, z){
var final = [];
for (var i = 0, l = x.length; i < l; i++){
for (var j = 0, k = 0, m = y.length, n = z.length; j < m; j++){
final.push([a[i], b[j], c[k]]);
if (j == m - 1 && k < n - 1){
k++;
j = -1;
}
}
}
console.log(final);
})(a, b, c);
Lo cual dará por resultado lo siguiente:
Código Console:
Ver originalArray(
Array(M, Pobre, Lima),
Array(M, Rico, Lima),
Array(M, Medio, Lima),
Array(M, Pobre, Chiclayo),
Array(M, Rico, Chiclayo),
Array(M, Medio, Chiclayo),
Array(M, Pobre, Trujillo),
Array(M, Rico, Trujillo),
Array(M, Medio, Trujillo),
Array(F, Pobre, Lima),
Array(F, Rico, Lima),
Array(F, Medio, Lima),
Array(F, Pobre, Chiclayo),
Array(F, Rico, Chiclayo),
Array(F, Medio, Chiclayo),
Array(F, Pobre, Trujillo),
Array(F, Rico, Trujillo),
Array(F, Medio, Trujillo)
)
Lo que hago es simple. Recorro al primer array y, en cada iteración, recorro al segundo, en donde, además, declaro un contador para ir tomando los valores del tercer array. En cada iteración de este segundo bucle, inserto un nuevo array dentro del array
final
con los valores equivalentes a los contadores en cada iteración y solo cuando el valor del contador del segundo array sea igual a la última posición de este y el contador del tercero sea menor que la última posición del suyo, incremento el valor del tercer contador y asigno -1 al segundo contador pues, al final de esa iteración, su valor se incrementará en uno, con lo cual, terminará siendo igual a cero.
Saludos