在 Javascript 中定义数组无法按预期工作
2019-05-19
156
以下代码:
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 响应的数据填充数组 (s)。 但事实并非如此,因为当 k=2(3d 项)时,我收到错误:
code.js:288 Uncaught TypeError: Cannot set property '0' of undefined
在 StackOverflow 上搜索时,我找到了此链接: 如何在 javascript 中创建空的 2d 数组? 描述我为声明数组所做的工作。
我期望上述代码将返回的值存储到 (s) 数组中。 但我收到上述错误。
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;
}
Oleg
2019-05-19
希望这能清楚说明你失败的原因:
let s = [ [], [] ];
// ^^^^ s[0] ^^^^s[1]
connexo
2019-05-19
Javascript 允许您对数组中尚不存在的位置进行赋值。 例如:
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]=[]
。
drclaw
2019-05-19