2013-05-22 2 views
2

Может кто-нибудь, пожалуйста, помогите мне создать массив array.I есть матричный калькулятор, и я хочу создать массив массивов («меньше»). Как я могу это сделать? functiions create2Darray и calculateDet работают нормально, поэтому теперь проблема с ними. Будем очень благодарны за помощь. Мне нужен массив этих массивов (миноры основной матрицы), чтобы вычислить их детерминанты и вычислить инвертированную матрицу. Вот HTML:Javascript, как создать массив массивов

<div id = "table4"> 
<div class = "calcHeader">Macierz odwrotna [3x3]</div> 
<form id = "row1"><!--first row--> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
</form> 
<form id = "row2"><!--second row--> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
</form> 
<form id = "row3"><!--third row--> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
    <input type = "text" class = "det3"/> 
</form> 
<div class = "count" onclick="invertMat('det3')"><a href = "#">Wylicz</a></div> 
</div> 

Javascript

function invertMat(matrixClass) { 
    var matrix = create2Darray(matrixClass); 
    var det = calculateDet(matrix); 
    //alert(det); 
    var invMat = new Array(); 
    for (var i = 0; i < matrix.length; i++) { 
     invMat[i] = new Array(); 
     for (var j = 0; j < matrix.length; j++) { 
      invMat[i][j] = 0; 
     } 
    } 
    if (matrix.length == 2) { 
     invMat[0][0] = 1/det * matrix[1][1]; 
     invMat[1][0] = 1/det * (-matrix[1][0]); 
     invMat[0][1] = 1/det * (-matrix[0][1]); 
     invMat[1][1] = 1/det * matrix[0][0]; 
     alert(invMat); 
    } else if (matrix.length == 3) { 
     //var smaller = new Array();//creating an empty array for a matrix minor 
     for (var i = 0; i < matrix.length; i++) { 
      var smaller = new Array(matrix.length - 1); 
      for (h = 0; h < smaller.length; h++) { 
       smaller[h] = new Array(matrix.length - 1); 
      } 
      for (a = 1; a < matrix.length; a++) { 
       for (b = 0; b < matrix.length; b++) { 
        if (b < i) { 
         smaller[a - 1][b] = matrix[a][b]; 
        } else if (b > i) { 
         smaller[a - 1][b - 1] = matrix[a][b]; 
        } 
       } 
      } 
     } 
    } 
} 

ответ

1

Попробуйте Понравилось Fiddle

var array1 = new Array(); 

array1.push(1); 
array1.push(2); 


var array2 = new Array(); 

array2.push(3); 
array2.push(4); 

var array3 = new Array(); 
array3.push(array1); 
array3.push(array2); 

console.log(array3[0]); 
console.log(array3[1]); 
2

Live demo

function create2Array(d1, d2, fn) { 
    var arr = [], 
     d = function(x, y) {}, 
     f = fn || d; 
    for (var i = 0; i < d1; i++) { 
     for (var j = 0, curr = []; j < d2; j++) { 
      curr[j] = f.call(window, i, j); 
     }; 
     arr[i] = curr; 
    }; 
    return arr; 
}; 


function print2DArray(arr) { 
    document.body.innerHTML += "<p><b>Array:</b></p>"; 
    for (var i = 0, len = arr.length; i< len; i++) { 
     document.body.innerHTML += "<p><b>" + i + "</b>: " + arr[i].join(" ") + "</p>"; 
    }; 
}; 

var matrix = create2Array(10, 10, function(x, y) { return 0;}), 
    m2 = create2Array(10, 10, function(x, y) { return x + y;}); 
print2DArray(matrix); 
print2DArray(m2); 

Используйте его, как это:

var matrix = create2Array(10, 10); 

Или вы даже можете указать пользовательскую функцию инициализации, который принимает индекс, как пары. Скажите, хотите ли вы по умолчанию установить матрицу с 0:

var matrix = create2Array(10, 10, function(x, y) { return 0;});