2017-09-11 127 views
0

以輸入其中yPerms是例的3D陣列:樹的遍歷通過3D陣列

[ 
    [[1,2,3],[4,5,6]], 
    [[11,12,13],[14,15,16]] 
] 

輸出必須是在每行中的值的任何可能的組合。在這個例子中正確的輸出將

[ 
    [[1,2,3],[11,12,13]], 
    [[1,2,3],[14,15,16]], 
    [[4,5,6],[11,12,13]], 
    [[4,5,6],[14,15,16]] 
] 

在現實中的投入將有更多的行和列,因此它不能只是一個for循環夫婦做(至少我看不出) 。

我的嘗試是一個完整的混亂,這個問題是在for循環這是爲了「重置」溫度,它似乎已經從所謂的下一個遞歸函數內採取值路徑:

function treeTraverse(yPerms, unique, row) { 
     var result = []; 
     var path = unique||[]; 
     var n = row||0; 
     if (yPerms.length <= n) { 
      console.log("found a path"); 
      return path; 
     } 
     for(let m in yPerms[n]) { 
      var temp = path; 
      temp.push(yPerms[n][m]); 
      result.push(treeTraverse(yPerms,temp,n+1)); 
     } 
     return result; 
    } 

回答

0

問題是獨特和臨時變成有效的相同變量,只是一個指針,而不是我想要的,我希望它們是分開的,但具有相同的值,這樣我就可以在不改變路徑的情況下操作臨時變量。爲了解決在路徑所以

var temp = path.slice(); 

此我只是用切片()這產生路徑的相同副本並將其分配到溫度。