2013-05-11 68 views
0

我有一個計算矩陣行列式的遞歸函數,但在它的參數中我有一個類名,後來我使用該函數,但這次我需要而不是參數作爲類名,我需要它只是一個矩陣的名稱。JavaScript技巧省略類

或者我可以以某種方式向我的小矩陣中添加一個類?或者我該如何欺騙這個。請多多指教。

function create2Darray(clname) 
{ 
    //creates a 2d array of an array returned by the function getElementsByClassName; 
    var A = document.getElementsByClassName(clname); 
     var arr = new Array(); 
    var rows = Math.sqrt(A.length); 
    for(var i = 0;i < rows; i++) 
    { 
     arr[i] = new Array(); 
     for(var j = 0; j < rows;j++) 
     { 
      arr[i][j] = A[i*rows + j].value; 
     } 
    } 
    return arr; 
} 

function determinant (matrixClass) 
{ 
    var matrix = create2Darray(matrixClass); 
    var det = 0; 
    if(matrix.length == 1) 
    { 
     return matrix[0][0]; 
    } 
    else if(matrix.length == 2) 
    { 
     return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]); 
    } 

    var smaller = new Array();//creating an empty array for a matrix minor; 
    for(var k = 0;k < matrix.length; k++) 
    { 
     smaller[k] = []; 
     for(var l = 0;l < matrix.length; l++) 
     { 
      smaller[k][l] = []; 
     } 
    }  

    for(var i = 0;i < matrix.length; i++) 
    { 
     for (a = 1; a < matrix.length; a++) 
     { 
      for (b = 0; b < matrix.length; b++) 
      { 
       if (b < i) 
       { 
        smaller[a - 1][b] = A[a][b]; 
       } 
       else if (b > i) 
       { 
        smaller[a - 1][b - 1] = A[a][b]; 
       } 
      } 
     } 
     if (i % 2 == 0) 
      s = 1; 
     else 
      s = -1; 

     det += s * A[0][i] * (determinant(smaller)); 
    } 
    return (det); 
    alert(det); 
} 

回答

0

如果我知道了,你需要行列式函數中的不同行爲,具體取決於你是否傳遞了類或名稱。

如何增加第二個參數來說明它是什麼?

function determinant(matrixClassOrName, type) { 
    if (type == "class") { 
     //logic for class 
    } 
    else if (type == "name") { 
     //logic for name 
    } 

} 

儘管在這種情況下您可以使用兩種不同的功能。

+0

if(type =='class'){ \t \t var matrix = create2Darray(matrixClass); \t} \t else if(type =='name'){ \t \t matrixClass = new Array(); \t \t var matrix = matrixClass; \t}會不喜歡那樣的工作? – user2167174 2013-05-11 23:00:00

+0

我認爲,而不是'matrixClass = new Array(); var matrix = matrixClass;'你可以只做'var matrix = new Array();' – 2013-05-11 23:15:28