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

7 浏览
0 Comments

查找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"]

0