递归独特的JavaScript方法?

时间:2016-12-12 07:44:35

标签: javascript arrays

我有一个这种形式的数组......

  • ARR [itemDescription]
    • [0] someValue1
    • [1] someotherValue1
  • ARR [itemDescription]
    • [0] someValue2
    • [1] someotherValue2
  • ARR [itemDescription]
    • [0] someValue3
    • [1] someotherValue3
  • ....

现在我想生成所有可能的变化,其中我有一个数组,第一个项目与其他元素相结合,第二个元素与其他元素相结合,依此类推。像:

  • [someValue1] [someValue2] [someValue3]
  • [someValue1] [someotherValue2] [someValue3]
  • [someValue1] [someotherValue2] [someotherValue3]
  • ....

总结一下,对于下面的输入数组:

[[11, 12], [21, 22], [31, 32]];

我需要获得一个像

这样的输出数组
[[11, 21, 31], [11, 21, 32], [11, 22, 31], [11, 22, 32], [12, 21, 31], [12, 21, 32], [12, 22, 31], [12, 22, 32]];

有人可以帮助我在javascript中如何做到这一点吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

我提出这个解决方案。为了决定选择子数组iside输入数组的索引,我使用数组维数模数全局索引:



var input = [[11, 12], [21, 22], [31, 32]];
var dim = Math.pow(2, input.length);
var output = new Array(dim);
output.fill(0);
input.forEach((x,i) => {
  var limit = dim / Math.pow(2, i+1);
  output.forEach((y,j,arr) => {
    var index = Math.floor((j+1)/limit) % 2;
    if (i === 0)
      arr[j] = [x[index]];
    else
      arr[j].push(x[index]);
  });
});
console.log(output);