我有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);
}
答案 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]]"]
*/