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