【问题标题】:Defining Array in Javascript doesn't work as expected在 Javascript 中定义数组不能按预期工作
【发布时间】:2019-05-19 22:05:49
【问题描述】:

以下代码:

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 item) 我得到一个错误:

code.js:288 Uncaught TypeError: Cannot set property '0' of undefined

在 StackOverflow 上搜索,我找到了这个链接: How to create empty 2d array in javascript? 描述我为声明我的数组所做的工作。

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

【问题讨论】:

  • s[2] 将是 undefined,因为 s 仅包含两个列表。你想在那里做什么?
  • 顺便说一句-您在每次迭代时都在解析响应文本。这有点浪费,我想。最好在开始时解析一次并设置为变量。

标签: javascript arrays


【解决方案1】:

稍微修改一下代码以根据需要添加数组:

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

【讨论】:

    【解决方案2】:

    希望这能说明你失败的原因:

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

    【讨论】:

      【解决方案3】:

      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]=[]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 2012-06-01
        • 2020-06-09
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多