如何在javascript中循环遍历数组?

时间:2017-05-18 21:36:43

标签: javascript arrays indexing

我需要一些关于如何遍历这个可变数组大小数组的帮助。

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

2 个答案:

答案 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)))循环的递归来执行此操作。

&#13;
&#13;
command
&#13;
&#13;
&#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 ]