请考虑Matix ,
A=[a_i,j]
。我想提取一个子矩阵,即for i,j<=4
但提取A3=[a_i,j]
(在底部右上角的二次矩阵2x2),这是我的代码。最后,我得到“对象不支持属性或方法推”。你知道怎么了吗?
for i,j=3,4
var n = 4;
var A = [];
var arr1 = [2, 1, 3, 4];
var arr2 = [6, 4, 1, 2];
var arr3 = [5, 3, 9, 7];
var arr4 = [1, 3, 2, 1];
A.push(arr1);
A.push(arr2);
A.push(arr3);
A.push(arr4);
document.getElementById("demo1").innerHTML = A;
document.getElementById("demo2").innerHTML = A[2][2];
function a(i, j) {
return A[i - 1][j - 1];
}
document.getElementById("demo3").innerHTML = a(3, 3);
var A3 = [];
for (i = n - 1; i < n + 1; i++) {
for (j = n - 1; j < n + 1; j++) {
A3 = A3.push(a(i, j));
}
}
document.getElementById("demo4").innerHTML = A3;
答案 0 :(得分:1)
您不应将A3.push()
分配给A3
,这就是为什么出现此错误的原因。
来自MDN:
[{
Array.push()
返回]调用该方法的对象的新length
属性。
var n = 4;
var A = [];
var arr1 = [2, 1, 3, 4];
var arr2 = [6, 4, 1, 2];
var arr3 = [5, 3, 9, 7];
var arr4 = [1, 3, 2, 1];
A.push(arr1);
A.push(arr2);
A.push(arr3);
A.push(arr4);
document.getElementById("demo1").innerHTML = A;
document.getElementById("demo2").innerHTML = A[2][2];
function a(i, j) {
return A[i - 1][j - 1];
}
document.getElementById("demo3").innerHTML = a(3, 3);
var A3 = [];
for (i = n - 1; i < n + 1; i++) {
for (j = n - 1; j < n + 1; j++) {
A3.push(a(i, j));
}
}
document.getElementById("demo4").innerHTML = A3;
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<p id="demo4"></p>
<p id="demo5"></p>
答案 1 :(得分:1)
您可以过滤行并映射切片的cols。
var array = [[2, 1, 3, 4], [6, 4, 1, 2], [5, 3, 9, 7], [1, 3, 2, 1]],
pos = { i: 2, j: 2 },
size = { i: 2, j: 2 },
result = array
.filter((_, i) => i >= pos.i && i < pos.i + size.i)
.map(a => a.slice(pos.j, pos.j + size.j))
console.log(result);
答案 2 :(得分:0)
Array.prototype.push
将元素添加到Array
,并返回length
中的Array
(在添加元素之后)。
您尝试使用:
A3.push(<something>)
代替
A3 = A3.push(<something>)
答案 3 :(得分:0)
尝试这个
function getSubMatrix(matrix, startRow, startCol, length) {
return matrix.slice(startRow, startRow + length).map(row => row.slice(startCol, startCol + length));
}