繁体   English   中英

在Javascript中定义数组无法正常工作

[英]Defining Array in Javascript doesn't work as expected

如下代码:

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上搜索时,我找到了以下链接: 如何在javascript中创建空的2d数组? 描述我为声明数组所做的事情。

我期望上面的代码将返回的值存储到(s)数组中。 但是我得到了上面描述的错误。

稍微更改代码以根据需要添加数组:

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;
}

希望这可以清楚说明您失败的原因:

let s = [  [],                  []        ];
//        ^^^^ s[0]            ^^^^s[1]

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]=[]分配一个空数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM