我遇到有关2d数组的问题。我们必须创建一个javascript函数addArrays(al,a2),它接收两个2d数字数组a1和a2并返回它们的" sum"在矩阵和的意义上。如果a是具有和的数组,则对于所有行i和所有列j,a [i] [j] = a1 [i] [j] + a2 [i] [j]。
我完全被难以理解我很确定我找到总和的逻辑是正确的,但我不知道是否有任何实际存储在sum数组中或者这个错误意味着什么。任何帮助将不胜感激。
这是我到目前为止的代码:
var sum = new Array(a1.length);
for (var k = 0; k<sum.length; k++) {
sum[k] = new Array(sum.length);
}
for (var l = 0; l<sum.length; l++) {
for (var m = 0; m<sum.length[l]; m++) {
sum[l][m].push(a1[l][m] + a2[l][m]);
}
}
return sum;
我们获得了一个测试文件:
function start() {
var ar1 = [[1,2], [3,4]],
ar11 = [[1,2], [3,4], [5,6]],
ar12 = [[1,2,3], [3,4]],
ar2 = [[6,7], [8,9]],
ar21 = [[6,7], [8,9], [19,11]],
ar22 = [[6,7], [8,9,10]],
ar;
try {
alert( addArrays(ar1, ar2).toSource() );
}
catch (e) {
alert( e );
}}
当我运行程序时,我不断收到错误: TypeError:addArrays(...)。toSource不是函数
答案 0 :(得分:2)
错误:TypeError:addArrays(...)。toSource不是函数
表示无法在toSource
返回的beign上找到函数addArrays
。 Object.toSource不属于任何标准,不应使用。
来自MDN
非标准
此功能是非标准的,不符合标准 跟踪。不要在面向Web的生产站点上使用它:它不会 为每个用户工作。两者之间可能存在很大的不兼容性 实现和行为可能在未来发生变化。
查看toSource的输出,它看起来与JSON类似。您可以更改测试以使用JSON.stringify来获得类似的输出。
function start() {
var ar1 = [[1,2], [3,4]],
ar11 = [[1,2], [3,4], [5,6]],
ar12 = [[1,2,3], [3,4]],
ar2 = [[6,7], [8,9]],
ar21 = [[6,7], [8,9], [19,11]],
ar22 = [[6,7], [8,9,10]],
ar;
try {
alert( JSON.stringify(addArrays(ar1, ar2)) );
}
catch (e) {
alert( e );
}}
答案 1 :(得分:1)
对于相同大小的数组,您可以创建一些像Array.prototype.matriceSum()
这样的数组方法,如下所示;
Array.prototype.matriceSum = function(a) {
return this.reduce((p,c,i) => (p[i] = c.reduce((f,s,j) => (f[j]+= s,f),p[i]),p),a.slice());
};
var a1 = [[1,2,3],[2,2,2],[4,5,6]],
a2 = [[6,6,6],[9,8,7],[6,5,4]];
a3 = a1.matriceSum(a2);
console.log(JSON.stringify(a3));
这不会改变它所调用的数组并返回一个新的2D数组,其中添加了两个2D数组的矩阵。