我正在尝试将键码与 sent1Array 匹配。如何让 forEach 转到数组中的下一个数字?
I am trying to match keycodes to the sent1Array. How do I make the forEach go to the next number in my array?
如果我输入第一个字母 ("T"),我会得到 "Congrats"。如果我键入下一个字母 ("h"),我会得到 "Nope",因为它还没有移动到我数组中的下一个键码。我需要移动到数组中的下一个字母并将其与下一个键码匹配。
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
input1.addEventListener("keydown", function(event) {
sent1Array.forEach(function() {
for (var i = 0; i < 1; i++) {
if (sent1Array[i] === event.keyCode) {
console.log("Congrats");
} else {
console.log("Nope");
}
}
})
});
每次最终用户输入正确的密钥时,您都需要增加当前数组索引。因此,这里不需要 for
或 .forEach
循环。相反,您可以在 keydown
事件侦听器回调之外定义当前键的索引,并在有人输入正确的键时手动增加索引,如下所示:
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
var current_key = 0; // index of current key to enter
document.getElementById("input1").addEventListener("keydown", function(ev) {
if (sent1Array[current_key] === event.keyCode) { // use current_key as an index for the array
console.log("Congrats");
current_key++; // increment the current_key index by one
} else {
console.log("Nope");
}
});
<input type="text" id="input1"/>
第一步是为什么当 i < 1 时 for 循环结束?不应该是 i <= sent1Array.length?
你的循环只运行宁一次它应该运行 sent1Array.length
。你也可以像这样减少循环。
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
input1.addEventListener("keydown", function(event) {
if(sent1Array.indexOf( event.keyCode ) != -1){
console.log("Congrats");
}else{
console.log("Nope");
}
});
<input type="text" id="input1"/>
你应该维护一个索引,它会随着你的按键而增加。只要键匹配就增加索引,并在用户开始出错时重置索引(和输入字段)
input1 = document.getElementById("input1");
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
var currentIndex = 0;
input1.addEventListener("keydown", function(event) {
if (sent1Array[currentIndex] === (event.keyCode)){
currentIndex++;
console.log('Congratz')
}
else {
//Maybe you should delete the last letter or the whole string from the input here.
currentIndex = 0
console.log('nope');
}
});
<input type="text" id="input1">
如果我输入第一个字母 ("T"),我会得到 "Congrats"。如果我键入下一个字母 ("h"),我会得到 "Nope",因为它还没有移动到我数组中的下一个键码。我需要移动到数组中的下一个字母并将其与下一个键码匹配。
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
input1.addEventListener("keydown", function(event) {
sent1Array.forEach(function() {
for (var i = 0; i < 1; i++) {
if (sent1Array[i] === event.keyCode) {
console.log("Congrats");
} else {
console.log("Nope");
}
}
})
});
每次最终用户输入正确的密钥时,您都需要增加当前数组索引。因此,这里不需要 for
或 .forEach
循环。相反,您可以在 keydown
事件侦听器回调之外定义当前键的索引,并在有人输入正确的键时手动增加索引,如下所示:
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
var current_key = 0; // index of current key to enter
document.getElementById("input1").addEventListener("keydown", function(ev) {
if (sent1Array[current_key] === event.keyCode) { // use current_key as an index for the array
console.log("Congrats");
current_key++; // increment the current_key index by one
} else {
console.log("Nope");
}
});
<input type="text" id="input1"/>
第一步是为什么当 i < 1 时 for 循环结束?不应该是 i <= sent1Array.length?
你的循环只运行宁一次它应该运行 sent1Array.length
。你也可以像这样减少循环。
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
input1.addEventListener("keydown", function(event) {
if(sent1Array.indexOf( event.keyCode ) != -1){
console.log("Congrats");
}else{
console.log("Nope");
}
});
<input type="text" id="input1"/>
你应该维护一个索引,它会随着你的按键而增加。只要键匹配就增加索引,并在用户开始出错时重置索引(和输入字段)
input1 = document.getElementById("input1");
var sent1Array = [84, 72, 69, 32, 81, 85, 73];
var currentIndex = 0;
input1.addEventListener("keydown", function(event) {
if (sent1Array[currentIndex] === (event.keyCode)){
currentIndex++;
console.log('Congratz')
}
else {
//Maybe you should delete the last letter or the whole string from the input here.
currentIndex = 0
console.log('nope');
}
});
<input type="text" id="input1">