查找JavaScript数组值的所有组合(Cartesian product)
如何在N个可变长度的JavaScript数组中生成值的所有组合?
假设我有N个JavaScript数组,例如
var first = ['a', 'b', 'c', 'd'];var second = ['e'];
var third = ['f', 'g', 'h', 'i', 'j'];
(在此示例中为三个数组,但针对该问题的数组数为N。)
我想输出其值的所有组合,以产生
aefaeg
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 r=allPossibleCases(allArrays);
//outputs ["acd", "bcd", "azd", "bzd", "ace", "bce", "aze", "bze", "acf", "bcf", "azf", "bzf"]
回答:
这不是排列,请参阅Wikipedia中的排列定义。
但是您可以通过 实现:
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;
}
}
您也可以使用循环来实现,但是这会有些棘手,并且需要实现自己的堆栈模拟。
以上是 查找JavaScript数组值的所有组合(Cartesian product) 的全部内容, 来源链接: utcz.com/qa/398452.html