Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 - Fatal编程技术网

Javascript 函数中声明的数组是静态的?

Javascript 函数中声明的数组是静态的?,javascript,arrays,Javascript,Arrays,所以我的问题是在一个函数中有两个声明的数组。每次调用此函数时,它都会从两个数组中删除一项。下次调用该函数时,元素会在保留之前被删除 现在我知道问题出在哪里了。我知道我在函数调用中声明了相同的数组,但我想要的是使这些数组成为静态的,我知道如果我在函数外声明了两个数组,它将非常有效 但是我不得不让这些数组在函数中声明。请问我有什么办法可以做到这一点吗?这是我的密码: function Tirage(){ var Binomes=['George','Davide','Anna','Martin'

所以我的问题是在一个函数中有两个声明的数组。每次调用此函数时,它都会从两个数组中删除一项。下次调用该函数时,元素会在保留之前被删除

现在我知道问题出在哪里了。我知道我在函数调用中声明了相同的数组,但我想要的是使这些数组成为静态的,我知道如果我在函数外声明了两个数组,它将非常有效

但是我不得不让这些数组在函数中声明。请问我有什么办法可以做到这一点吗?这是我的密码:

function Tirage(){
  var Binomes=['George','Davide','Anna','Martin','Lucy','Nancy'];
  var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];

  var c1=parseInt((Math.random())*(Binomes.length));
  var c2=parseInt((Math.random())*(Projet.length));

  Binomes.splice(c1,1);
  Projet.splice(c2,1);

  alert(c1+"\n"+Binomes);
  alert(c1+"\n"+Projet);
}

编辑 初始代码是这样的,我不允许更改它或在函数之外有其他代码:

function Tirage(){
     var Binomes=['George','Davide','Anna','Martin','Lucy','Nancy'];
     var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];

     //Complete Code here
}
编辑2

似乎这个问题是不可理解的,这是我的错,所以练习希望我创建一个随机绘图,并将我绘制的内容插入表格中的行中。这个函数里面有两个贴花数组,我必须从每个数组中随机抽取一个元素,并将它作为一行插入到一个表中,包含两个单元格

因为我没有很好地阅读这个练习,我认为函数在每次函数调用中只绘制一次,这意味着如果我第一次单击,我将只绘制一次,并将该绘制插入表中,那么第二次将是相同的事情,但要避免绘制已经插入表中的内容


很抱歉,原来的问题已经在下面回答了。这取决于您当前的上下文。如果您的上下文
这个
是某个类的实例,那么您可以简单地将数组添加为实例的属性

然而,我将假设您不在实例中,因此
这个
可能会引用
窗口
对象

函数Tirage(){
if(!window.Binomes&&!window.Project){
控制台。登录(“登录”);
window.Binomes=[“乔治”、“戴维德”、“安娜”、“马丁”、“露西”、“南希”];
Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];
}
const{Binomes,Projet}=窗口;
var c1=parseInt((Math.random())*(Binomes.length));
var c2=parseInt((Math.random())*(Projet.length));
双名拼接(c1,1);
项目拼接(c2,1);
console.log(c1+“\n”+双名);
控制台日志(c2+“\n”+项目);
日志(“剩余长度:“+Binomes.Length+”,“+Projet.Length”);
}

设置间隔(轮胎老化,1000)我在这里提出的解决方案可能有点混乱。 它似乎甚至回答了这里提出的问题,因为我们希望继续选择将所有代码放在执行操作的函数中。 显然,两个变量
Tirage.arrayC1
Tirage.arrayC2
是全局变量,但它们在函数内部声明,并且在我们的函数范围内

验证它们是否不值得
未定义的
的条件可以精确地确保它们的值不会因函数的各种执行而丢失

第一次调用函数时,它们肯定是“
未定义的
”,这将是声明它们和拥有空板的最佳时机

我希望这对你有帮助

函数Tirage(){
if(Tirage.arrayC1==未定义| | Tirage.arrayC2==未定义){
Tirage.arrayC1=[];
Tirage.arrayC2=[];
}
变量双名=['George'、'Davide'、'Anna'、'Martin'、'Lucy'、'Nancy'];
var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];
var c1=parseInt((Math.random())*(Binomes.length));
var c2=parseInt((Math.random())*(Projet.length));
Tirage.arrayC1.push(c1);
Tirage.arrayC2.push(c2);
对于(var i=0;i看到您在注释中链接到的练习3,我注意到您被要求编写一个函数,该函数将一次建立所有连接,只需要对该函数进行一次调用。它应该填充一个表

在这种情况下,按如下方式进行:

函数Tirage(){
变量双名=['George'、'Davide'、'Anna'、'Martin'、'Lucy'、'Nancy'];
var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];
//获取对该表的引用
var table=document.getElementById(“IADO”);
//如果存在tbody元素,则删除该元素。如果存在,则删除先前的结果。
如果(table.children.length>1)table.removeChild(table.children[1]);
//重新生成新的t车身元件
var tbody=table.appendChild(document.createElement(“tbody”);
while(Binomes.length&&Projet.length){
var c1=Math.floor(Math.random()*Binomes.length);
var c2=Math.floor(Math.random()*Projet.length);
//将相应的2个值成对添加到输出数组中:
变量行=tbody.insertRow(-1);
变量单元格=行插入单元格(-1);
cell.textContent=双名拼接(c1,1)[0];
单元格=行插入单元格(-1);
cell.textContent=项目拼接(c2,1)[0];
}
}
.CSSTableGenerator{width:100%}

主人
开始
名称
框架

您可以使用
this.Binomes
this.Projet
而不是声明变量。只需检查数组是否在开始时不存在,在这种情况下,您就可以创建它们。
但是我不得不让这些数组声明在函数中
您可以详细说明这个要求吗?例如,您可以使用IIFE吗?作业是关于哪一部分的?这项作业的学习部分是什么?那么你如何知道哪些配对已经完成?这项任务真的要使用
alert
吗?这听起来真的不是一个好的编程练习……这个练习在公共网站上可用吗?即使是法语,你能提供到它的链接吗,所以我们可以阅读整个上下文?Usi