После небольшого исследования я обнаружил предыдущий связанный с ним вопрос: Поиск всех комбинаций значений массива JavaScript
Я адаптировал часть кода оттуда, чтобы он возвращался массив массивов, содержащий все перестановки:
function(arraysToCombine) {
var divisors = [];
for (var i = arraysToCombine.length - 1; i >= 0; i--) {
divisors[i] = divisors[i + 1] ? divisors[i + 1] * arraysToCombine[i + 1].length : 1;
}
function getPermutation(n, arraysToCombine) {
var result = [],
curArray;
for (var i = 0; i < arraysToCombine.length; i++) {
curArray = arraysToCombine[i];
result.push(curArray[Math.floor(n / divisors[i]) % curArray.length]);
}
return result;
}
var numPerms = arraysToCombine[0].length;
for(var i = 1; i < arraysToCombine.length; i++) {
numPerms *= arraysToCombine[i].length;
}
var combinations = [];
for(var i = 0; i < numPerms; i++) {
combinations.push(getPermutation(i, arraysToCombine));
}
return combinations;
}
Я поместил рабочую копию в http://jsfiddle.net/7EakX/ , которая принимает массив, который вы ([[0,1], [0,1,2,3], [0,1,2]]) и выводит результат на консоль браузера.