我需要一些关于如何遍历这个可变数组大小数组的帮助。
var x = [[1,2,3],[8],[10,11,12],[13]];
我希望结果在包含组合的数组中。
y = [[1,8,10,13],[2,8,10,13],[3,8,10,13]
,[1,8,11,13],[2,8,11,13],[3,8,11,13]....]
我希望这对我想做的事情有意义。
for(var i=0; i<x.length; i++)
{
for(var ii=0; x[i].length; ii++)
{
//At this point I have x[0], but each number needs to be part of a compination
}
}
我最终想要做的是获取一组列表(用户设置的列表数量)并在列表中组合。例4列出如下。
1 5 8 12
2 6 11
3 9
4 10
答案 0 :(得分:4)
这看起来像cartesian product,您可以使用一个var x = [[1,2,3],[8],[10,11,12],[13]];
function cartesian(data) {
var result = [];
function generate(data, n, c) {
if (n == data.length) {
result.push(c.slice())
return;
}
for (var i = 0; i < data[n].length; i++) {
c[n] = data[n][i];
generate(data, n + 1, c);
}
}
generate(data, 0, [])
return result
}
console.log(JSON.stringify(cartesian(x)))
循环的递归来执行此操作。
command
&#13;
答案 1 :(得分:0)
function makeCombo(x, pickFrom, soFar) {
if (pickFrom == x.length ) {
console.log(soFar);
return;
}
for (var option = 0 ; option < x[pickFrom].length ; ++option) {
soFar.push(x[pickFrom][option]);
makeCombo(x, pickFrom+1, soFar);
soFar.pop();
}
}
makeCombo([[1,2,3],[8],[10,11,12],[13]], 0, []);
输出:
[ 1, 8, 10, 13 ]
[ 1, 8, 11, 13 ]
[ 1, 8, 12, 13 ]
[ 2, 8, 10, 13 ]
[ 2, 8, 11, 13 ]
[ 2, 8, 12, 13 ]
[ 3, 8, 10, 13 ]
[ 3, 8, 11, 13 ]
[ 3, 8, 12, 13 ]