在单个函数中填充单个或双Javascript数组
有一些关于JavaScript数组的事情我似乎不知道,因为我得到了一些我不理解的结果。我来自C++背景。 为什么双数组结果是在单个函数中填充单个或双Javascript数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,有一些关于JavaScript数组的事情我似乎不知道,因为我得到了一些我不理解的结果。我来自C++背景。 为什么双数组结果是[空字符串],而我认为它应该显示双数组的内容。单数组结果就是我所期望的结果 我想结果应该是 1,2,3 1,2,3,4,1,2,3,4,1,2,3,4 但是他们是 1,2,3 [Empty String] 为什么? MyClass=function(){ 这个._arr=[1]; }; //发送1或2个整数参数,并通过“参数”访问 MyClass.prototyp
[空字符串]
,而我认为它应该显示双数组的内容。单数组结果就是我所期望的结果
我想结果应该是
1,2,3
1,2,3,4,1,2,3,4,1,2,3,4
但是他们是
1,2,3
[Empty String]
为什么?
MyClass=function(){
这个._arr=[1];
};
//发送1或2个整数参数,并通过“参数”访问
MyClass.prototype.ZeroArray=函数(){
var isDoubleArray=arguments.length>1;
变量i、j、iter1、iter2;
var-arrUse;
//如果只是单个阵列,iter1将为1
//“i”迭代用于设置arrUse
iter1=isDoubleArray?参数[0]:1;
iter2=isDoubleArray?参数[1]:参数[0];
//清除任何现有阵列
这一点。_arr.length=0;
//i循环要么在arr[i][]上工作
//或在单个阵列的情况下将arrUse设置为arr
对于(i=0;i0?str:“[空字符串]”;
var g_GlobalDouble=new MyClass();
g_GlobalDouble.ZeroArray(3,4);
str=g_GlobalDouble._arr.toString();
document.getElementById(“Double”).innerHTML=str.length>0?str:“[空字符串]”代码>
这里将显示单个数组的内容
这里将显示双数组内容。
我可以解释“为什么”,这很简单。看看这几行
for (i = 0; i < iter1; i++) {
arrUse = isDoubleArray ? this._arr[i] : this._arr;
if (isDoubleArray) arrUse = [];
这里将显示单个数组的内容
这里将显示双数组内容。
我可以解释“为什么”,这很简单。看看这几行for (i = 0; i < iter1; i++) {
arrUse = isDoubleArray ? this._arr[i] : this._arr;
if (isDoubleArray) arrUse = [];
这里将显示单个数组的内容
这里将显示双数组内容。
正如@Jameic所指出的 当isDoubleArray为false时(即,仅传递1个参数时),您将arrUse设置为对此的引用。\u arr.对arrUse[x]的后续调用将更新该引用的数组。 但是,当isDoubleArray为true时,您正在重新创建数组。对arrUse[x]的后续调用不再更新引用,而是更新新创建的数组 您的for
循环不需要额外的arrUse
数组,因为您可以直接更新this.\u arr
数组
而且,当你这样做的时候
arrUse[j] = j;
它将一次又一次地更新同一索引,它不会将新元素推入数组,您需要将其替换为this.\u arr.push
MyClass=function(){
这个。_arr=[];
};
//发送1或2个整数参数,并通过“参数”访问
MyClass.prototype.ZeroArray=函数(){
var isDoubleArray=arguments.length>1;
变量i、j、iter1、iter2;
var-arrUse;
//如果只是单个阵列,iter1将为1
//“i”迭代用于设置arrUse
iter1=isDoubleArray?参数[0]:1;
iter2=isDoubleArray?参数[1]:参数[0];
//清除任何现有阵列
这一点。_arr.length=0;
//i循环要么在arr[i][]上工作
//或在单个阵列的情况下将arrUse设置为arr
对于(i=1;i 0?str:“[空字符串]”;
这里将显示单个数组的内容
这里将显示双数组内容。
正如@Jameic所指出的 当isDoubleArray为false时(即,仅传递1个参数时),您将arrUse设置为对此的引用。\u arr.对arrUse[x]的后续调用将更新该引用的数组。 但是,当isDoubleArray为true时,您将重新创建数组。对arrUse[x]的后续调用不再更新引用,而是更新新创建的数组 您的for
循环不需要额外的arrUse
数组,因为您可以直接更新this.\u arr
数组
而且,当你这样做的时候
arrUse[j] = j;
它将一次又一次地更新同一索引,它不会将新元素推入数组,您需要将其替换为this.\u arr.push
MyClass=function(){
这个。_arr=[];
};
//发送1或2个整数参数,并通过“参数”访问
MyClass.prototype.ZeroArray=函数(){
var isDoubleArray=arguments.length>1;
变量i、j、iter1、iter2;
var-arrUse;
//如果只是单个阵列,iter1将为1
//“i”迭代用于设置arrUse
iter1=isDoubleArray?参数[0]:1;
iter2=isDoubleArray?参数[1]:参数[0];
//清除任何现有阵列
这一点。_arr.length=0;
//i循环要么在arr[i][]上工作
//或在单个阵列的情况下将arrUse设置为arr
对于(i=1;i 0?str:“[空字符串]”;
这里将显示单个数组的内容
这里将显示双数组内容。
您正在这一行中重新创建arrUse
if(isDoubleArray)arrUse=[]
-这是一个局部变量,所以不会更新这个。_arr
我认为这正是您所期望的。我不太理解您的代码试图实现的目标,否则我会写一个解释如何实现它的答案,所以我想您说的是,我将arrUse在我的脑海中视为参考(在C++中)?在这种情况下,我将如何使用javascript实现我心目中的(引用)功能?基本上,我希望行arrUse[j]=j;
可以执行这项操作。_arr[I][j]=j;
或这项操作。