1

我有 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);
}
4

3 回答 3

2

您的代码有未定义的变量:“k”似乎在两个函数中突然出现

行 var id = "A" + (i + 1) + (j + 1); 将为 i 和 j 的(某些)不同变体([i = 11 and j = 1] == [i = 1 and j = 11])生成相同的 id,这可能会导致进一步的错误

如果您提到您遇到的错误,它总是很有用 - 我希望您的脚本根本不会像它们一样运行......

于 2012-05-18T08:57:13.563 回答
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()复制数组中的值。

于 2012-05-18T08:58:16.500 回答
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]]"]
*/
于 2012-05-18T09:24:14.367 回答