gpt4 book ai didi

任意数量的数组及其索引的 JavaScript 组合

转载 作者:行者123 更新时间:2023-11-30 11:25:38 24 4
gpt4 key购买 nike

我正在处理一个有点奇怪的问题,即排列 n 个给定数组。

假设我有 3 个数组(但可能更多):

  • 长度为 2 的数组 A:var A = new Array(1);
  • 长度为 2 的数组 B:var B = new Array(1);
  • 长度为 3 的数组 C:var C = new Array(2);

我想计算这 3 个数组的长度的所有可能排列。

结果应该是这样的:

  • A[0],B[0],C[0]
  • A[0],B[0],C[1]
  • A[0],B[0],C[2]
  • A[0],B[1],C[0]
  • A[0],B[1],C[1]
  • A[0],B[1],C[2]
  • A[1],B[0],C[0]
  • A[1],B[0],C[1]
  • A[1],B[0],C[2]
  • A[1],B[1],C[0]
  • A[1],B[1],C[1]
  • A[1],B[1],C[2]...

我实际上需要这样的输出。我不关心此时分配给数组的值。

不幸的是,我没有任何工作代码可以分享。一旦我想出可以远程工作的东西,我会立即更新这篇文章。

最佳答案

您可以对具有值的给定数组的任意长度使用嵌套归约结构。

var words = [['quick', 'lazy'], ['brown', 'black', 'grey'], ['fox', 'dog']],
result = words.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));

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

您可以采用更详细的方法,在其中向发生推送的收集结果添加一些逻辑。

function getCombinations(array) {
function iter(i, p) {
if (i === array.length) {
result.push(p); // <==================== use the items
return;
}
array[i].forEach(function (a) {
iter(i + 1, p.concat(a));
});
}

var result = [];

iter(0, []);
return result;
}

var words = [['quick', 'lazy'], ['brown', 'black', 'grey'], ['fox', 'dog']],
result = getCombinations(words);

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

关于任意数量的数组及其索引的 JavaScript 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com