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


泛舟湖上清波郎朗
浏览 864回答 3
3回答

临摹微笑

这不是排列,请参阅维基百科的排列定义。但是你可以通过递归来实现这个目的:var&nbsp;allArrays&nbsp;=&nbsp;[['a',&nbsp;'b'],&nbsp;['c'],&nbsp;['d',&nbsp;'e',&nbsp;'f']]function&nbsp;allPossibleCases(arr)&nbsp;{ &nbsp;&nbsp;if&nbsp;(arr.length&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;arr[0]; &nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;[]; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;allCasesOfRest&nbsp;=&nbsp;allPossibleCases(arr.slice(1));&nbsp;&nbsp;//&nbsp;recur&nbsp;with&nbsp;the&nbsp;rest&nbsp;of&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;allCasesOfRest.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;arr[0].length;&nbsp;j++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.push(arr[0][j]&nbsp;+&nbsp;allCasesOfRest[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result; &nbsp;&nbsp;}}你也可以使用循环来实现它,但它会有点棘手,需要实现你自己的堆栈模拟。
打开App,查看更多内容
随时随地看视频慕课网APP