1

2つの関数があります。最初の関数では2次元配列を生成し、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」は両方の関数のどこからともなく現れるようです

Line var id = "A" +(i + 1)+(j + 1); さらなるエラーの原因となる可能性のあるiとjの(いくつかの)異なるバリエーション([i=11とj=1] == [i=1とj=11])に対して同一のIDを生成します

そして、あなたが得ているエラーについて言及するなら、それは常に役に立ちます-私はあなたのスクリプトがそのままではまったく実行されないことを期待します...

于 2012-05-18T08:57:13.563 に答える
2

k配列の長さである変数は、どこにも定義されていません。それを示すエラーが発生するはずです。

関数にエラーがありますreturnDet。最初に配列を作成し、次に:smallerからの「第2レベル」の配列で埋めます。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 に答える