我写了代码:
var from = 6;
var io_arr = [0, 1, 2, 3];
var mem_arr = [0, 1, 2, 3];
var cpu_arr = [0, 1, 2, 3];
var x = new Array(io_arr.length);
for (var i = 0; i < io_arr.length; i++) {
x[i] = new Array(4);
}
for (var i = 1; i <= io_arr.length; i++) {
for (var j = 0; j <= 3; j++) {
if(j == 0) {
x[i][j] = from + i - 1;
}
if (j == 1) {
x[i][j] = io_arr[i];
}
if (j == 2) {
x[i][j] = mem_arr[i];
}
if (j == 3) {
x[i][j] = cpu_arr[i];
}
}
}
有错误
TypeError: undefined is not an object (evaluating 'x[i][j] = io_arr[i]')
这有什么问题?我对JS很新,很抱歉,如果答案很明显的话。
答案 0 :(得分:0)
我的猜测:
for (var i = 1; i <= io_arr.length; i++)
需要:for (var i = 0; i < io_arr.length; i++)
或者,您是否有特定原因在第二个for
循环中对其进行了修改?
答案 1 :(得分:0)
for (var i = 1; i <= io_arr.length; i++) {
是错误的,第一个索引是0而不是1.你走得太远,因为最后一个索引不是io_arr.length
的值,而是小于长度的一个(因为它从0开始;))
这应该有效:
for (var i = 0; i < io_arr.length; i++) {
我通过更改此行来检查代码,并且不会抛出任何错误。这只是您必须习惯的一些编程基础
答案 2 :(得分:0)
所以我的原始建议(在评论中)是在同一循环中执行两个操作。这将允许您摆脱两行代码。所以
var x = new Array(io_arr.length);
for (var i = 0; i < io_arr.length; i++) {
x[i] = new Array(4);
}
for (var i = 1; i <= io_arr.length; i++) {
for (var j = 0; j <= 3; j++) {
if(j == 0) {
x[i][j] = from + i - 1;
}
if (j == 1) {
x[i][j] = io_arr[i];
}
if (j == 2) {
x[i][j] = mem_arr[i];
}
if (j == 3) {
x[i][j] = cpu_arr[i];
}
}
}
将被替换为
var x = new Array(io_arr.length);
for (var i = 0; i < io_arr.length; i++) {
x[i] = new Array(4);
for (var j = 0; j <= 3; j++) {
if(j == 0) {
x[i][j] = from + i - 1;
}
if (j == 1) {
x[i][j] = io_arr[i];
}
if (j == 2) {
x[i][j] = mem_arr[i];
}
if (j == 3) {
x[i][j] = cpu_arr[i];
}
}
}
问题是您希望x
的第一行为空。您可以通过在循环中添加if
语句在单个循环中执行此操作:
var x = new Array(io_arr.length);
for (var i = 0; i < io_arr.length; i++) {
x[i] = new Array(4);
if (x === 0) continue;
for (var j = 0; j <= 3; j++) {
if(j === 0) {
x[i][j] = from + i - 1;
}
if (j === 1) {
x[i][j] = io_arr[i];
}
if (j === 2) {
x[i][j] = mem_arr[i];
}
if (j === 3) {
x[i][j] = cpu_arr[i];
}
}
}
这应该会给你你想要的答案。
请注意,我已将==
更改为===
,这应该始终是首选,因为==
会执行奇怪的转换,而Javascript纯粹主义者并不喜欢它