Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在单个函数中填充单个或双Javascript数组_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

在单个函数中填充单个或双Javascript数组

在单个函数中填充单个或双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

有一些关于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.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;
这项操作。