查找JavaScript数组值的所有组合(笛卡尔积)
查找JavaScript数组值的所有组合(笛卡尔积)
如何生成长度可变的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)); // 递归处理剩余的数组
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);
// 输出 ["acd", "bcd", "azd", "bzd", "ace", "bce", "aze", "bze", "acf", "bcf", "azf", "bzf"]