我正在创建一个简单的问答游戏来帮助修改并且第二次重新填充数组时遇到了麻烦。
单击按钮时,将执行以下代码。
if(setSelection == 0){
tempQuestions = chosenQuestion;
tempAnswers = chosenAnswer;
}
第一次完美无缺。
如果选择了正确的答案,则以下代码会从临时数组中删除问题和答案,保留原始答案。
tempQuestions.splice(randomQuestion,1)
tempAnswers.splice(selectedAnswer, 1);
当第二次按下该按钮时,“游戏”完成后,即使我正在执行相同的代码,临时数组也无法重新填充。
为什么上面的代码在第二次运行时不起作用的任何想法?
修改
答案 0 :(得分:1)
您正在创建对同一数组的新引用,因此在修改临时变量时,还会修改所选变量引用的对象。您需要复制数组。一种不错的方法是将自己的copy()
原型方法添加到Array对象。
浅拷贝应该这样做:
Array.prototype.copy = function(){
return this.slice(0);
}
如果您需要深层复印件
Array.prototype.copy = function(){
return JSON.parse(JSON.stringify(this));
}
像这样使用:
if(setSelection == 0){
tempQuestions = chosenQuestion.copy();
tempAnswers = chosenAnswer.copy();
}
答案 1 :(得分:0)
使用.slice有效。
tempQuestions = chosenQuestion.slice();
slice()操作克隆数组并返回对原始数据的引用。