Js的最后一个数组项未定义
js last array item is undefined
我正在尝试制作一款绞刑游戏,在游戏开始时要求用户输入单词。一旦有了单词,它就使用for循环将单词字母一个接一个地填充到数组中。不幸的是,由于某些原因,最后一个数组元素总是未定义的。代码(JS):
for(i=0;i<word.length;i++)
{
if(i == word.length - 1)
{
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
}
else
{
pcArray.push(word[i]);
}
}
原因很简单:您没有将最后一个字母添加到pcArray
中。让我们假设我们的单词是'bird'(因为bird 是一个单词)。你的代码会遍历字母b, i和r并将它们推入数组,目前为止一切顺利。但是当它到达d时,它在位置word.length-1
-因为数组长度从1开始,但索引从0开始。您的if
语句阻止它将最后一个字母推到单词。有两种解决方案:
else
语句:
for(i=0;i<word.length;i++){
if(i == word.length - 1){
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
}
pcArray.push(word[i]);
}
这将推动每个字母每次!然而,有一种更有效的方法:
for(i=0;i<word.length;i++)
pcArray.push(word[i]);
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
这样,您将只执行初始代码一次,而不是每次检查if
。你知道你的循环只会运行只要有字母,那么为什么还要用if呢?
正如@Shilly在评论中提到的,您可以这样做来完全放弃for循环:
pcArray = word.split('');
假设有人输入单词"Test"。对于i === 3
,这是最后一次迭代,您输入if
子句,您将错过else
子句,这就是您所做的:
pcArray.push(word[i]);
无论你是在if
还是else
中,你都要这样做,所以你可以放下else
子句,无论如何都要这样做
循环的最后一步不执行pcArray.push(word[i]);
。很明显,最后一个值不见了。
但是如果你想把字符串转换成数组,只需这样做:
var pcArray = word.split('');
相关文章:
- JSON解析未从数组中获取值
- Join架构验证:Join.object定义数组中的有效键
- 值未与数组对象绑定
- 在定义数组后填充数组
- 带有自定义数组的迷你图
- 函数中的Javascript未定义数组
- Meteor会话变量未存储数组
- 如何在Angular中设置异步HTTP服务的回调,以便在不定义数组的情况下在控制器中填充数组
- Javascript-自定义数组不起作用
- 为什么不能映射“未定义”数组
- JSON 多维数组未显示(“数组未定义”)
- 确定猫鼬中空数组和未定义数组之间的区别
- 未定义数组值
- 未捕获的类型错误:无法读取属性'长度'的未定义(数组)
- forEach()创建未定义数组(Javascript)
- Javascript console.log未读取数组未定义
- Jquery回调未定义数组
- Javascript拆分未定义数组
- 对array构造函数创建的未定义数组执行forEach操作
- 禁止未定义数组属性的javascript错误