开发者问题收集

在 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