gpt4 book ai didi

javascript - 查找 JavaScript 数组值的所有组合(笛卡尔积)

转载 作者:IT王子 更新时间:2023-10-29 02:58:43 26 4
gpt4 key购买 nike

如何生成 N 个可变长度的 JavaScript 数组中值的所有组合?

假设我有 N 个 JavaScript 数组,例如

var first = ['a', 'b', 'c', 'd'];
var second = ['e'];
var third = ['f', 'g', 'h', 'i', 'j'];

(在这个例子中是三个数组,但它的问题是 N 个数组。)

我想输出它们值的所有组合,产生

aef
aeg
aeh
aei
aej
bef
beg
....
dej

编辑:这是我使用 ffriend 接受的答案作为基础的版本。

var allArrays = [['a', 'b'], ['c', 'z'], ['d', 'e', 'f']];

function allPossibleCases(arr) {
if (arr.length === 0) {
return [];
}
else if (arr.length ===1){
return arr[0];
}
else {
var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array
for (var c in allCasesOfRest) {
for (var i = 0; i < arr[0].length; i++) {
result.push(arr[0][i] + allCasesOfRest[c]);
}
}
return result;
}

}
var results = allPossibleCases(allArrays);
//outputs ["acd", "bcd", "azd", "bzd", "ace", "bce", "aze", "bze", "acf", "bcf", "azf", "bzf"]

最佳答案

这不是排列,参见 permutations definitions来自维基百科。

但是你可以通过递归来实现:

var allArrays = [
['a', 'b'],
['c'],
['d', 'e', 'f']
]

function allPossibleCases(arr) {
if (arr.length == 1) {
return arr[0];
} else {
var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array
for (var i = 0; i < allCasesOfRest.length; i++) {
for (var j = 0; j < arr[0].length; j++) {
result.push(arr[0][j] + allCasesOfRest[i]);
}
}
return result;
}

}

console.log(allPossibleCases(allArrays))

你也可以用循环来实现它,但这会有点棘手,并且需要实现你自己的堆栈模拟。

关于javascript - 查找 JavaScript 数组值的所有组合(笛卡尔积),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331092/

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