在JavaScript中从n个数组和m个元素生成组合

我们需要编写一个JavaScript函数,该函数根据n个数组(其中包含m个元素)生成组合。

例如-

考虑这个数据-

const arr = [

   [0,1],

   [0,1,2,3],

   [0,1,2]

]

3个子数组,其中有不同数量的元素。

我们想要做的是通过组合每个数组中的一项来获得所有组合。

例如-

0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2

0,0,1

0,0,2

0,1,0

0,1,1

0,1,2

0,2,0

0,2,1

0,2,2

等等。

如果数组的数量是固定的,则很容易进行硬编码实现。但是数组的数量可能会有所不同-

const arr1 = [[0,1], [0,1]];

const arr2 = [[0,1,3,4], [0,1], [0], [0,1]];

示例

为此的代码将是-

const arr = [

   [0,1],

   [0,1,2,3],

   [0,1,2]

]

const combineAll = (array) => {

   const res = [];

   let max = array.length−1;

   const helper = (arr, i) => {

      for (let j=0, l=array[i].length; j<l; j++) {

         let copy = arr.slice(0);

         copy.push(array[i][j]);

         if (i==max)

         res.push(copy);

         else

         helper(copy, i+1);

      };

   };

   helper([], 0);

   return res;

};

console.log(combineAll(arr));

控制台中的输出将是-

[

   [ 0, 0, 0 ], [ 0, 0, 1 ],

   [ 0, 0, 2 ], [ 0, 1, 0 ],

   [ 0, 1, 1 ], [ 0, 1, 2 ],

   [ 0, 2, 0 ], [ 0, 2, 1 ],

   [ 0, 2, 2 ], [ 0, 3, 0 ],

   [ 0, 3, 1 ], [ 0, 3, 2 ],

   [ 1, 0, 0 ], [ 1, 0, 1 ],

   [ 1, 0, 2 ], [ 1, 1, 0 ],

   [ 1, 1, 1 ], [ 1, 1, 2 ],

   [ 1, 2, 0 ], [ 1, 2, 1 ],

   [ 1, 2, 2 ], [ 1, 3, 0 ],

   [ 1, 3, 1 ], [ 1, 3, 2 ]

]

以上是 在JavaScript中从n个数组和m个元素生成组合 的全部内容, 来源链接: utcz.com/z/316096.html

回到顶部