I'm trying to make an combination with an array of arrays in javascript. The point is the length of given array can be any number. For example, input and output are like this. Input:
[
[{
level: 1,
value: "a"
}, {
level: 1,
value: "b"
}],
[{
level: 2,
value: "c"
}, {
level: 2,
value: "d"
}],
[{
level: 3,
value: "e"
}, {
level: 3,
value: "f"
}]
]
Expected Output:
[
[{
level: 1,
value: "a"
}, {
level: 2,
value: "c"
}, {
level: 3,
value: "e"
}],
[{
level: 1,
value: "a"
}, {
level: 2,
value: "c"
}, {
level: 3,
value: "f"
}],
[{
level: 1,
value: "a"
}, {
level: 2,
value: "d"
}, {
level: 3,
value: "e"
}],
[{
level: 1,
value: "a"
}, {
level: 2,
value: "d"
}, {
level: 3,
value: "f"
}]
[{
level: 1,
value: "b"
}, {
level: 2,
value: "c"
}, {
level: 3,
value: "e"
}],
[{
level: 1,
value: "b"
}, {
level: 2,
value: "c"
}, {
level: 3,
value: "f"
}],
[{
level: 1,
value: "b"
}, {
level: 2,
value: "d"
}, {
level: 3,
value: "e"
}],
[{
level: 1,
value: "b"
}, {
level: 2,
value: "d"
}, {
level: 3,
value: "f"
}]
]
The temporary solution is as below and I would like to shorten this function using a recursive function call.
options = []
for (const level1 of levels[0]) {
for (const level2 of levels[1] {
for (const level3 of levels[2] {
options.push([level1, level2, level3])
}
}
}
This function above shoule be shorten as follwing.
const result = getCombinations(array, array.length);
function getCombinations(array, length) {
let result = [];
function iter(array) {
// do something here
}
let i = 0;
while(i < length)
iter(array[i++], length);
}
It doesn't only have to be the same way as above.
I'm trying not to hard-code depending on the length of array as the example for the repeated for-loop code using recursive function.