我一直试图设计一种算法,通过连接包含该序列的单个片段的不同变体的数组来生成给定序列的所有可能变体。 我有一个看起来像这样的JS对象:
[[a1, a2], [b1, b2, b3], [c1]]
我需要的输出结果如下:
[[a1, b1, c1], [a1, b2, c1], [a1, b3, c1], [a2, b1, c1], [a2, b2, c1], [a2, b3, c1]]
子数组中包含的变体数量可能因输入而异,包含数组本身的长度也可能不同。元素的顺序必须是守恒的(如此简单的排列并不能解决问题)。
我已经提出以下代码:
var temp = []
var final = []
for (var i = 0; i < array.length; i=i+2) {
var current = array[i] //store first batch of variants in a variable
if(array[i+1] != undefined){ var next = array[i+1] //store next batch of variants
for (var a = 0; a < current.length; a++) {
for (var b = 0; b < next.length; b++) {
temp.push(current[a].concat(next[b]));
//push current variant of the first object and
//current variant of the second object into an array
final.push(temp); //record the array
temp = []; //renew the temporary array
}
}
}
}
return final;
如果我用一个只包含两个元素的序列来提供它,这似乎有效,但是任何更长的序列都不起作用。 如何使上述代码过度工作以适应更长的序列?谁有更好的想法如何处理它? 另外,请原谅我,如果我遗漏了一些明显的东西,我仍然处于开始编码的阶段。