Yahel - 1 year ago 165
Javascript Question

# Finding All Combinations of JavaScript array values

How can I produce all of the combinations of the values in N number of JavaScript arrays of variable lengths?

Let's say I have N number of JavaScript arrays, e.g.

``````var first = ['a', 'b', 'c', 'd'];
var second = ['e'];
var third =  ['f', 'g', 'h', 'i', 'j'];
``````

(Three arrays in this example, but its N number of arrays for the problem.)

And I want to output all the combinations of their values, to produce

``````aef
aeg
aeh
aei
aej
bef
beg
....
dej
``````

EDIT: Here's the version I got working, using ffriend's accepted answer as the basis.

``````var allArrays = [['a', 'b'], ['c', 'z'], ['d', 'e', 'f']];

function allPossibleCases(arr) {
if (arr.length === 0) {
return [];
}
else if (arr.length ===1){
return arr[0];
}
else {
var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1));  // recur with the rest of array
for (var c in allCasesOfRest) {
for (var i = 0; i < arr[0].length; i++) {
result.push(arr[0][i] + allCasesOfRest[c]);
}
}
return result;
}

}
var r=allPossibleCases(allArrays);
//outputs ["acd", "bcd", "azd", "bzd", "ace", "bce", "aze", "bze", "acf", "bcf", "azf", "bzf"]
``````

This is not permutations, see permutations definitions from Wikipedia.

But you can achieve this with recursion:

``````var allArrays = [['a', 'b'], ['c'], ['d', 'e', 'f']]

function allPossibleCases(arr) {
if (arr.length == 1) {
return arr[0];
} else {
var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1));  // recur with the rest of array
for (var i = 0; i < allCasesOfRest.length; i++) {
for (var j = 0; j < arr[0].length; j++) {
result.push(arr[0][j] + allCasesOfRest[i]);
}
}
return result;
}

}
``````

You can also make it with loops, but it will be a bit tricky and will require implementing your own analogue of stack.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download