Javascript如何创建数组数组

时间:2013-05-22 14:30:53

标签: javascript arrays

有人可以帮我创建一个数组数组。我有一个矩阵计算器,我想创建一个数组数组('较小')。我怎么能这样做?功能create2Darray和calculateDet工作正常,所以现在他们有问题了。真的很感激帮助。我需要这些数组(主矩阵的未成年人)的数组来计算他们的决定因素并计算倒置矩阵 这是HTML:

<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];
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分: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);

或者你甚至可以指定一个自定义的init函数,它将索引作为参数。 假如你想在默认情况下用0初始化矩阵:

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

答案 1 :(得分: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]);
相关问题