查找JavaScript数组值的所有组合(Cartesian product)

如何在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 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

回到顶部