所以我的问题是我在一个函数中有2个声明的数组。每次我调用此函数时,它都会从两个数组中删除一项。下次调用该函数时,元素将在保留之前被删除。
现在我知道问题出在哪里了,我知道我在函数调用中声明了相同的数组,但是我想要使这些数组成为静态的,并且我知道如果我在函数外声明了2个数组,它将完美地锻炼。
但是我不得不让那些在函数内部声明的数组。那么请问有什么办法可以做到这一点?这是我的代码:
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);
}
EDIT 最初的代码是这个,并且不允许我更改它或在功能之外添加其他代码:
function Tirage(){
var Binomes=['George','Davide','Anna','Martin','Lucy','Nancy'];
var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];
//Complete Code here
}
编辑2
似乎这个问题是无法理解的,这是我的错,所以练习需要我创建一个“随机绘制”并将我绘制的内容插入表中的行中。实现此功能的函数内部有2个贴花的数组,我必须从每个数组中随机绘制一个元素,并将其作为具有2个单元格的行插入表中。
因为我对本练习的理解不佳,所以我认为该函数在每个函数调用中仅绘制一次,这意味着如果我第一次单击,我只会绘制一次并将该绘制插入表格中,那么第二次是相同的事情,只是避免画出表中已经插入的内容。
对此感到抱歉,原来的问题已经在下面回答
答案 0 :(得分:1)
看到您在评论中链接的the document的练习3,我注意到您被要求编写一个函数,该函数将一次使所有连接 ,只需要一个 调用该函数。并且它应该填充表格。
在这种情况下,请按照以下步骤操作:
function Tirage() {
var Binomes=['George','Davide','Anna','Martin','Lucy','Nancy'];
var Projet=['Foundation','Skeleton','Bootstrap','UIkit','Base','W3.CSS'];
// Get a reference to the table
var table = document.getElementById("IADO");
// Remove the tbody element if it exists. This is to remove the previous result if there is one.
if (table.children.length > 1) table.removeChild(table.children[1]);
// Regenerate a new tbody element
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);
// Add the corresponding 2 values as a pair in the output array:
var row = tbody.insertRow(-1);
var cell = row.insertCell(-1);
cell.textContent = Binomes.splice(c1,1)[0];
cell = row.insertCell(-1);
cell.textContent = Projet.splice(c2,1)[0];
}
}
.CSSTableGenerator { width: 100% }
<fieldset>
<legend>Master</legend>
<fieldset>
<legend><button onclick="Tirage()">Start</button></legend>
<table id="IADO" style="border-collapse: collapse;" class="CSSTableGenerator">
<thead><!-- header of the table -->
<tr style="border: 1px solid black;">
<th style="border: 1px solid black;">Name</th>
<th style="border: 1px solid black;">Framework</th>
</tr>
</thead>
</table>
</fieldset>
</fieldset>
旁注:请不要在已经是数字的数字上使用parseInt
。它将使数字成为字符串,然后使字符串再次成为数字。请改用Math.floor
。
答案 1 :(得分:0)
这取决于您当前所处的环境。如果您的上下文DrawItem
是某个类的实例,则只需将数组添加为实例的属性。
但是,我假设您不在实例中,因此ComboBox
可能会引用this
对象。
this
答案 2 :(得分:0)
我在这里提出的解决方案可能会有些混乱。
似乎甚至可以回答这里提出的问题,因为我们希望继续选择将所有代码放入执行操作的函数中。
显然,两个变量Tirage.arrayC1
和Tirage.arrayC2
是全局变量,但是它们在函数内部声明并且在函数的范围之内。
通过验证它们是否不值得undefined
的条件,可以精确地将其值丢失给函数的各种执行。
函数第一次被调用时,它们肯定是“ undefined
”,这是声明它们并拥有空白面板的最佳时机。
希望对您有帮助。
function Tirage(){
if(Tirage.arrayC1 == undefined || Tirage.arrayC2 == undefined){
Tirage.arrayC1 = [];
Tirage.arrayC2 = [];
}
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));
Tirage.arrayC1.push(c1);
Tirage.arrayC2.push(c2);
for(var i=0; i<Tirage.arrayC1.length;i++){
Binomes.splice(Tirage.arrayC1[i],1);
Projet.splice(Tirage.arrayC2[i],1);
}
console.log(Binomes);
console.log(Projet);
}
Tirage();
Tirage();
Tirage();
Tirage();
Tirage();
Tirage();
Tirage();
Tirage();