通过动态数组

时间:2017-03-15 15:39:17

标签: javascript arrays algorithm performance recursion

我正在寻找以下代码段的通用解决方案::



var d = [[1,2,3], [1,2], [1,2,3,4,5,6]];

d[0].map((val1, index1) => {
    d[1].map((val2, index2) => {
        d[2].map((val3, index3) => {
            console.log(index1, index2, index3);
        })
    })
});




这里控制了3个数组元素的可能组合。

我们可以概括一下,例如。

var d = [[1,2,3], [1,2], [1,2,3,4,5,6], [1,2,3,4]]; // k number of elements

Psuedo code ::

let processor = (d) => {
    // implementation code
    // output will be the combination for 4 array elements this time.
}

有人可以帮我设计过程功能吗?寻找一个普遍的解决方案。任何帮助或领导都是可观的。

2 个答案:

答案 0 :(得分:1)

您可以使用迭代和递归方法。

var d = [[1, 2, 3], [1, 2], [1, 2, 3, 4, 5, 6]],
    processor = array => {
        var iter = p => p.length < array.length ?
                array[p.length].forEach((_, i) => iter(p.concat(i))) :
                console.log(p);

        iter([]);
    };

processor(d);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

您可以执行以下操作;

&#13;
&#13;
var cart = (a,b) => a.reduce((p,c) => p.concat(b.map(e => [].concat(c,e))),[]);
     arr = [[1,2,3], [1,2], [1,2,3,4,5,6], [8,9]],
     res = arr.reduce(cart);

console.log(JSON.stringify(res));
&#13;
&#13;
&#13;