Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
144
rated 0 times [  145] [ 1]  / answers: 1 / hits: 50911  / 11 Years ago, fri, march 8, 2013, 12:00:00

I'm having trouble coming up with code to generate combinations from n number of arrays with m number of elements in them, in JavaScript. I've seen similar questions about this for other languages, but the answers incorporate syntactic or library magic that I'm unsure how to translate.



Consider this data:



[[0,1], [0,1,2,3], [0,1,2]]


3 arrays, with a different number of elements in them. What I want to do is get all combinations by combining an item from each array.



For example:



0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2


And so on.



If the number of arrays were fixed, it would be easy to make a hard coded implementation. But the number of arrays may vary:



[[0,1], [0,1]]
[[0,1,3,4], [0,1], [0], [0,1]]


Any help would be much appreciated.


More From » permutation

 Answers
43

Here is a quite simple and short one using a recursive helper function:


function cartesian(...args) {
var r = [], max = args.length-1;
function helper(arr, i) {
for (var j=0, l=args[i].length; j<l; j++) {
var a = arr.slice(0); // clone arr
a.push(args[i][j]);
if (i==max)
r.push(a);
else
helper(a, i+1);
}
}
helper([], 0);
return r;
}

Usage:


cartesian([0,1], [0,1,2,3], [0,1,2]);

To make the function take an array of arrays, just change the signature to function cartesian(args) instead of using rest parameter syntax.


[#79727] Thursday, March 7, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
deanna

Total Points: 84
Total Questions: 86
Total Answers: 107

Location: Cyprus
Member since Wed, Dec 8, 2021
3 Years ago
;