1

假设我有三个数组abc。我想从 中获取元素的所有组合,[a,b,c]但不是。[b,c][c][a,c]

我的工作递归函数如下,以数组数组为参数[a,b,c]

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 i = 0; i < arr[0].length; i++) {
      for (var c in allCasesOfRest) {
        if (allCasesOfRest[c].split("~").length === arr.length-1) {
          result.push(arr[0][i]+"~"+allCasesOfRest[c]);  
        }
        result.push(allCasesOfRest[c]);
      }
    }
    return result;
  }
};

然后我map在结果字符串数组上使用.split("~")函数来获取包含我的组合的数组数组。

我无法弄清楚如何优雅地使递归分层而不allCasesOfRest[c]在将其推入之前测试result拆分的长度(拆分结果的数组长度应该是arr.length-1)。

有任何想法吗 ?

4

0 回答 0