Javascript/JQuery:多维数组在嵌套循环中初始化时失去作用域

Javascript/JQuery:多维数组在嵌套循环中初始化时失去作用域,javascript,jquery,arrays,scope,multidimensional-array,Javascript,Jquery,Arrays,Scope,Multidimensional Array,我一定是缺少了一些基本的东西,但当在嵌套循环中调用全局多维数组变量时,我几乎无法理解这个查询 代码: //全局变量 line2=新数组(); $.fn.gtest=函数(){ var values1=“a,s”; 行=值1.拆分(','); //第一圈 $.each(行,函数)(行号,行){ //第二圈 对于(var datavalueNo=0;datavalueNo

我一定是缺少了一些基本的东西,但当在嵌套循环中调用全局多维数组变量时,我几乎无法理解这个查询

代码:

//全局变量
line2=新数组();
$.fn.gtest=函数(){
var values1=“a,s”;
行=值1.拆分(',');
//第一圈
$.each(行,函数)(行号,行){
//第二圈
对于(var datavalueNo=0;datavalueNo<5;datavalueNo++){
line2[datavalueNo]=新数组();
line2[datavalueNo][lineNo]=新数组();
第2行[datavalueNo][lineNo][0]=“测试”;
第2行[datavalueNo][lineNo][1]=“1”;
}
});
};
在第一个循环结束时,line2的值为: 测试,1,测试,1,测试,1,测试,1,测试,1,测试,1

第二个循环结束时,line2的值为: ,测试,1,,测试,1,,测试,1,,测试,1,,测试,1,,测试,1,,测试,1

for循环被调用两次

从第一次第二次循环(称为第一次的for循环)填充到第2行中的所有值都将消失,并且只剩下第二次第二次循环(称为第二次的for循环)中的值


我希望我能够澄清我的查询。

覆盖值的原因是
line2[datavalueNo]=new Array()

您必须检查此变量是否在以下情况之前定义:

  //global variable
  var line2 = [];
  $.fn.gtest = function(){
    var values1 = "a,s",
        lines = values1.split(',');
    $.each(lines, function(lineNo, line) {
      for(var datavalueNo = 0; datavalueNo < 5; datavalueNo++) {
        if(line2[datavalueNo] === undefined) {
           line2[datavalueNo] = [];
        }
        line2[datavalueNo].push(["Test",1]);
      }
    });
  };
//全局变量
变量line2=[];
$.fn.gtest=函数(){
var values1=“a,s”,
行=值1.拆分(',');
$.each(行,函数)(行号,行){
对于(var datavalueNo=0;datavalueNo<5;datavalueNo++){
if(第2行[datavalueNo]==未定义){
第2行[datavalueNo]=[];
}
第2行[datavalueNo]。推送([“测试”,1]);
}
});
};

有什么问题?你想实现什么?在你的问题中有一些事情是不清楚的:你所说的“第一次迭代”和“第二次迭代”是什么意思?(是否运行此函数两次?)当您说“line2的值为…”时,您是如何生成此格式的?(根据代码,
line2
是数组的数组,因此不清楚这与示例输出的关系)。很抱歉,我只调用了一次此函数。在函数中有两次迭代,在第二次迭代中填充my(数组数组数组),但是当第二次调用第二次迭代(for循环)时,从上一次迭代(for循环称为first)保存的值被覆盖。我通过在一个简单的alert()调用中弹出'line2'变量来生成的格式。这将有助于查看您在何处记录值hanks a ton。我也在检查,但似乎检查错了:if(!Object.prototype.toString.call(line2[datavalueNo])!='[Object Array]'{line2[datavalueNo]=new Array();}
  //global variable
  var line2 = [];
  $.fn.gtest = function(){
    var values1 = "a,s",
        lines = values1.split(',');
    $.each(lines, function(lineNo, line) {
      for(var datavalueNo = 0; datavalueNo < 5; datavalueNo++) {
        if(line2[datavalueNo] === undefined) {
           line2[datavalueNo] = [];
        }
        line2[datavalueNo].push(["Test",1]);
      }
    });
  };