所以我在一个数组中有一个数组。它被称为r0w。这是它的样子:
r0w[0] = [1,38,0,63,20,39,1,36,36,36,34,35,35,36,36,37,1]
r0w[1] = [1,38,63,124,20,101,1,36,36,36,34,35,35,36,36,37,1]
r0w[2] = [1,38,124,185,20,162,1,36,36,36,34,35,35,36,36,37,1]
r0w[3] = [1,48,185,248,25,224,1,44,37,103,35,92,1]
现在我想对数组中的这些数组执行一些计算,并将其输出到名为absw1dth的数组中的另一个数组。这是我的代码。
var absw1dth = [[]];
for (e=0 ; e < r0w.length ; e++ ) {
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
for (f=8 ; f < r0w[e].length ; f++ ) {
absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
};
};
它在此行中不断出错
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
并说undefined不是一个对象。
我做错了什么?
答案 0 :(得分:3)
问题在于abswidth
的初始化。你已经完成了这个
var absw1dth = [[]];
...将创建一个包含一个元素的数组,另一个数组不包含任何元素。因此,当e
为1
(而不是0
)时,表达式absw1dth[e][0]
正在尝试索引到不存在的数组abswidth[1]
。
如果数据与您显示的一样是静态的(r0w
数组中总是只有四行),您可以通过初始化来解决它:
var absw1dth = [ [], [], [], [] ];
现在abswidth
是一个四元素数组,其中每个元素都是一个空数组。
但如果数据更具动态性,我可能会即时初始化:
var absw1dth = []; // Just an empty array
for (e=0 ; e < r0w.length ; e++ ) {
abswidth[e] = []; // Create this element
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
for (f=8 ; f < r0w[e].length ; f++ ) {
absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
};
};
// ...
}
如果您未展示的代码可能已在abwidth
内创建了数组元素,但也可能没有,则可以先测试:
var absw1dth = []; // Just an empty array
for (e=0 ; e < r0w.length ; e++ ) {
if (!abswidth[e]) {
abswidth[e] = []; // Create this element
}
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
for (f=8 ; f < r0w[e].length ; f++ ) {
absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
};
};
// ...
}
或者全部使用“函数式编程”并使用JavaScript的curiously-powerful ||
operator:
var absw1dth = []; // Just an empty array
for (e=0 ; e < r0w.length ; e++ ) {
abswidth[e] = abswidth[e] || []; // Create this element if needed
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
for (f=8 ; f < r0w[e].length ; f++ ) {
absw1dth[e][f - 7] = (r0w[e][f] + absw1dth[e][f - 8]);
};
};
// ...
}
答案 1 :(得分:1)
尝试:
var absw1dth = [];
for (e=0 ; e < r0w.length ; e++ ) {
absw1dth[e] = [];
absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );
//...
答案 2 :(得分:1)
absw1dth[e][0]
不是对象,因为absw1dth[e]
还不是对象。
尝试absw1dth[e] = []; absw1dth[e][0] = ( r0w[e][7] + r0w[e][1] );