查找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)); // 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"]
3 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
这不是排列,请参阅维基百科的排列定义。
但是你可以通过递归来实现这个目的:
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; }}
你也可以使用循环来实现它,但它会有点棘手,需要实现你自己的堆栈模拟。
添加回答
举报
0/150
提交
取消