问题描述
我是网页设计的新手,刚刚在CC上学习。 现在尝试编写我自己的js文本游戏,部分研究js。 我被阵列困住了。 我有一个带字符串的预定义数组,需要与用户答案进行比较,但比较没有做。
var myArray = ['selection 1', 'selection 2', 'selection 3', 'selection 4', 'selection 5', 'selection 6', 'selection 7', 'selection 8'];
alert("text description of scene and dimensions");
var dmg_start = Math.floor((Math.random() * 50) + 1); // pre-start damage dimension, will be used further
var user = prompt("make a selection").toLowerCase();
第一个想法,怎么做:
if (user.indexOf(myArray) > 0) {
console.log(user); // or mb document.write?
} else {
var user = prompt("make a selection").toLowerCase();
}
alert(myArray + "you can choose following");
第二个想法是:
var find = function (myArray, user) {
for (var i = 0; i < myArray.length; i++) {
if (myArray[i] == user) {return i;
}
}
return null;
};
第三个想法是:
do
{
var user = prompt("make a selection").toLowerCase();
}
while (myArray.indexOf(user); // in idea, here must be checking for existence user given value in array
alert(myArray + "you can choose following");
另外,我认为可以在第一次错误数据输入后使用警报提醒(myArray +“你可以选择跟随”); 帮助用户做出决定,然后使用continue循环。
在某些情况下,我得到两次循环迭代,然后断开循环,即使在循环用户给出错误(不包含在数组中)值。
但两者都没用。 你能建议哪种方式来解决这个问题?
非常感谢您的关注并帮助我了解更多信息。
1楼
试试这个...
var someArray = ['selection 1', 'selection 2', 'selection 3'];
var someIndex = -1;
do {
var someUser = prompt("make a selection").toLowerCase();
for (var i = 0; i < someArray.length; i++) {
if (someArray[i] === someUser) {
someIndex = i;
break;
}
}
if (someIndex > -1) {
alert('found at index: ' + someIndex);
} else {
alert('not found: please try this...');
// or something more put here
}
}
while (someIndex === -1);
2楼
如果在阵列中的第一个位置找到用户输入,则您的条件将失败。
if (user.indexOf(myArray) > 0) {
和
while (myArray.indexOf(user))
如果没有找到,则indexOf()
给出-1
>= 0
。
编辑:IST 2015年7月19日上午09:11
尝试使用循环最多2次尝试的此示例:
var fruits = ['apple', 'mangoe', 'grape']; var cnt = 2; //max attempt var inp; // for user input var pos; do { inp = prompt('Name a fruit').toLowerCase(); pos = fruits.indexOf(inp); if (-1 === pos) alert('Fruits available: ' + fruits); } while (--cnt); //upto max attempts