定义数组的次要内容

时间:2012-05-18 08:44:28

标签: javascript

我有2个函数,在第一个我生成一个二维数组,在第二个我定义一个数组减去最后一行和列。但它不起作用。代码如下:

function calcDet () {   
    var A = [];     //generates the array
    for (var i = 0; i < k; i++) {
        A[i] = [];
        for (var j = 0; j < k; j++) {   
            var id = "A" + (i + 1) + (j + 1);                   
            A[i][j] =  parseFloat(document.getElementById(id).value);               
        }
     }   
     return (A); 
}
function returnDet() {            
    var s;
    var A = calcDet();
    var smaller=[];                
    for (var i=0;i<k-1;i++) {
        smaller[i]=A[i]             
        for (var j=0;j<k-1;j++) {
            smaller[i][j]=A[i][j];
        }
    }
    alert (smaller);
}

3 个答案:

答案 0 :(得分:2)

您的代码有未定义的变量: “k”似乎在两个函数中都无处不在

线 var id =“A”+(i + 1)+(j + 1); 将为i和j([i = 11和j = 1] == [i = 1和j = 11])的(某些)不同变体生成相同的id,这可能是导致进一步错误的原因

如果你提到你得到的错误总是有用的 - 我希望你的脚本根本不会运行......

答案 1 :(得分:2)

您的变量k(数组的长度)无处定义。它应该输入一个错误说明。

您的returnDet功能出错了。首先创建数组smaller,然后用A中的“第二级”数组填充它:

    smaller[i]=A[i];

之后,您将smaller[i]中的每个值(除了最后一个)设置为它们已有的值:

    for (var j=0;j<k-1;j++) {
        smaller[i][j]=A[i][j];
    }

然而,smaller[i][k-1](最后一个,你不想要的)仍然存在于数组中,因为smaller[i]A[i]都指向同一个对象。你想要做的是:

function returnDet() {   
    var A = calcDet();
    var smaller = [];                
    for (var i=0; i<A.length-1; i++)
        smaller[i] = A[i].slice(0, -1);
    return smaller;
}
alert(returnDet());

Array.slice()复制数组中的值。

答案 2 :(得分:0)

使用内置语言功能可以使代码更易于编写和理解,并且效率更高。

function trim (arr, r, c) {
  // Return a new array omitting the last r rows and c columns
  //    of a two dimensional array arr
  //    if not specified r and c default to 1

  arr = arr.slice (0, -(r || 1)); // remove last r rows
  arr.forEach (function (v, i, a) { a[i] = v.slice (0, -(c || 1)); });
  return arr;
}

[JSON.stringify (trim ([[11, 12, 13], [21, 22, 23], [31, 32, 33]])),
 JSON.stringify (trim ([[11, 12, 13], [21, 22, 23], [31, 32, 33]], 1, 2)),
 JSON.stringify (trim ([[11, 12, 13], [21, 22, 23], [31, 32, 33]], 2, 1))]

/* Displays on JS console :
  ["[[11,12],[21,22]]", "[[11],[21]]", "[[11,12]]"]
*/