以下代码:
let s=[[],[]];
let k=0;
while (k<(JSON.parse(req.responseText).length)){
s[k][0] =dataBack[k].ModuleCode;
s[k][1] =dataBack[k].ModuleDescription;
k=k+1;
}
应使用来自Ajax响应的数据填充数组。 但是事实并非如此,因为当k = 2(3d项)时,我得到一个错误:
code.js:288 Uncaught TypeError: Cannot set property '0' of undefined
在StackOverflow上搜索时,我发现此链接: How to create empty 2d array in javascript? 描述我为声明数组所做的事情。
我期望上面的代码将返回的值存储到(s)数组中。 但是我得到了上述错误。
答案 0 :(得分:3)
稍微更改代码以根据需要添加数组:
let s=[];
let k=0;
while (k<(JSON.parse(req.responseText).length)){
s.push([]);
s[k][0] =dataBack[k].ModuleCode;
s[k][1] =dataBack[k].ModuleDescription;
k=k+1;
}
答案 1 :(得分:1)
希望这可以清楚说明您失败的原因:
let s = [ [], [] ];
// ^^^^ s[0] ^^^^s[1]
答案 2 :(得分:0)
Javascript将使您可以ASSIGN到数组中尚不存在的位置。 例如:
var a=[];
a[10]=12345;
console.log(a);
//Output: [ <10 empty items>, 12345 ]
但是,在代码中,您要先访问未定义的位置,然后再尝试修改返回的内容。
添加一个中间步骤可能会弄清为什么它不起作用:
let s=[[],[]];
let k=0;
while (k<(JSON.parse(req.responseText).length)){
var tmp=s[k]; //When k>=2 tmp is undefined.
tmp[0] =dataBack[k].ModuleCode; //Trying to add a property at 0 on undefined object
tmp[1] =dataBack[k].ModuleDescription;
k=k+1;
}
@Oleg在回答中给出了很好的解决方法,但是使用s.push([])
来确保您要访问的值在后续修改之前是确定的。
或者,您可以在修改前直接s[k]=[]
分配一个空数组。