有问题阅读我的数组javascript的内容

时间:2015-04-21 22:42:12

标签: javascript arrays

所以我有这个基于文本的游戏,我正在提示用户必须输入一些文本,并根据给定的特定功能执行的选项。但是,当代码读取数组的长度时,它表示数组未定义。继承人代码:

//handles user input
function uiPrompt (options) {
    for (var i = 0; i < options[0].length; ++i) {
        if (playerInput = options[i][0]) {break; }
        options[i][0];
    }
}

//start menu at the beginning of the game
function startMenu () {
    options = [ ['n', 'l', 'new game', 'load game', 'new', 'load'],
                    ['newGame()', 'loadGame()', 'newGame()', 'loadGame()', 'newGame()', 'loadGame()'] ];
    document.getElementById('text').innerHTML = 'RANDOM RPG: Where everything is random! \n (N)ew Game \n (L)oad Game';
    uiPrompt();
}

所以在options变量中,第一行是用户输入的字符串,代码将接受它作为有效的玩家选择。第一行中每个选项元素正下方的相邻元素是输入相应选项时要执行的函数。例如,如果玩家要输入'n'来开始一个新游戏,那么它下面的元素,函数newGame()将被执行。我的问题是当按下提交用户输入按钮时(调用uiPrompt函数)我收到错误,Uncaught TypeError:无法读取此行的未定义属性'0':

for (var i = 0; i < options[0].length; ++i) {
我做错了什么?提前完成。

3 个答案:

答案 0 :(得分:0)

在我看来,你在没有选项参数的情况下调用uiPrompt 尝试:

function startMenu () {
    options = [ ['n', 'l', 'new game', 'load game', 'new', 'load'],
                    ['newGame()', 'loadGame()', 'newGame()', 'loadGame()', 'newGame()', 'loadGame()'] ];
    document.getElementById('text').innerHTML = 'RANDOM RPG: Where everything is random! \n (N)ew Game \n (L)oad Game';
    uiPrompt(options); // rather then uiPrompt()
}

答案 1 :(得分:0)

当你想调用它们时,你不能将函数调用存储为数组中的字符串。 (嗯,你可能会以某种方式,但那将是非常的)

可能会做类似

的事情
var options: {
  newGame:  ['n', 'new game', 'game'],
  loadGame: ['l', 'load game', 'game']
}
var functions: {
  newGame: function() {
    /* your function */
  },
  loadGame: function() {
    /* your function */
  }
}

然后在uiPromt中你可以做到

for (functionName in options) {
  // check if playerInput is in options[functionName] array
  if (options[functionName].indexOf(playerInput) >= 0) {
    functions[functionName]() // call function
    break
  }
}

答案 2 :(得分:0)

刚刚更新了你的js,你有一些错误初始化,所以我纠正了它们。只需控制在uiPromt中记录值,这是你想要实现的吗?

SP.SOD.executeFunc('sp.js', 'SP.ClientContext', 
 function (){
     //your code goes here...
 });