Javascript 阵列未重置函数并从备用阵列中删除项

Javascript 阵列未重置函数并从备用阵列中删除项,javascript,jquery,arrays,Javascript,Jquery,Arrays,在这个文字游戏中,我随机生成9个字母,等待用户输入,然后检查用户输入的每个字母是否只使用开始时生成的字母 例如,如果startwordgame()生成单词maximizes 用户可以选择两个i和m,但只能选择一个a、x、z、e和s。。因此,如果他们输入单词“zebra”或“iii”,它将检查数组中的每个字母,并在第三个字母处检查,因为b不在列表中,或者i已多次使用。但如果我输入“迷宫”,它就会工作 问题 我遇到的问题是,“checkWordtolist”函数中的变量“checklist”不会在每

在这个文字游戏中,我随机生成9个字母,等待用户输入,然后检查用户输入的每个字母是否只使用开始时生成的字母

例如,如果startwordgame()生成单词maximizes 用户可以选择两个i和m,但只能选择一个a、x、z、e和s。。因此,如果他们输入单词“zebra”或“iii”,它将检查数组中的每个字母,并在第三个字母处检查,因为b不在列表中,或者i已多次使用。但如果我输入“迷宫”,它就会工作

问题 我遇到的问题是,“checkWordtolist”函数中的变量“checklist”不会在每次调用该函数时重置,即使我没有在任何我希望game.letters在生成后成为常量的地方将其定义为新值,该.gameletters数组也会更改

清单只是一个临时数组,每次调用函数时都可以重置为原始数组(this.gameletters)

虽然当我删除清单中的元素时,它也会从这个.gameletters中删除它 当我从数组中移除元素时

Html元素

<input type="text" class="sumbit"  maxlength="9" size="1" value="" />

Javascript元素

function startwordgame() {
    this.gameletters = ["m","a","x","i","m","i","z","e","s"]; //Randomly generated list of 9 letters,

 this.checkWordtolist = function(){ 
            var checklist = this.gameletters;
            value = $(".sumbit").val();

            console.log(this.gameletters);
            for (var i = 0; i < value.length; i++) {
                console.log(value[i]);
                if (checklist.indexOf(value[i]) == -1) {

                    console.log("Letter not in list or used more than once");

                } else {    

                    checklist.splice(checklist.indexOf(value[i]),1)

                }
            }
            console.log("valid word") // call check dictionary function 
            value = $(".sumbit").val(""); // reset user's input

    }
函数startwordgame(){
this.gameletters=[“m”、“a”、“x”、“i”、“m”、“i”、“z”、“e”、“s”];//随机生成的9个字母列表,
this.checkWordtolist=函数(){
var检查表=此项。字母;
值=$(“.sumbit”).val();
console.log(this.gameletters);
对于(变量i=0;i
}


高级感谢:)
检查表
在每次调用函数时都设置为
gamelets
的值。您可以简单地跳过将数组复制到
检查表
中,并在函数中使用
gameletters

数组是Javascript中的引用类型,因此
var checklist=this.gameletters仅将对数组的引用复制到
检查表
,而不复制数组本身

这样做的效果是,当您执行
checklist.splice()
时,实际上是在修改原始数组

以您想要的方式复制阵列的最简单、最直接的方法是:

var checklist = this.gameletters.slice();

基本上,从原始数组中获取一个切片,并将其分配给
检查表
,不提供任何范围,该切片将由原始数组中的每个项目组成。

var checklist=this.gamelets这里它将gameletters的引用分配给检查表,所以当你删除元素时,它会影响到这两个不起作用的元素,因为我使用检查表来查看用户输入是否有许多相同的值。如果我使用gameletters,我只需在其他地方将其定义为常量,因为它在其他地方使用,并且需要是静态的