从数组中选择元素时出现意外的标识符

时间:2014-08-02 17:16:05

标签: javascript jquery arrays

我的头发撕裂了一个语法错误:我无法弄清楚的意外标识符。我知道错误意味着什么,但据我所知,没有错。

我发布了我正在使用的整个脚本;代码的目的是允许用户一次一步地重放类似gomoku的游戏。游戏数据存储在csv文件中,该文件每次移动都有一行并包含多个游戏。游戏由索引值标识。

var replayArray = [],
    rawData=[[]];

function importData(matchID,gI) {
    var dataPromise = $.ajax({
        url:"./data/" + matchID + ".csv",
        dataType: 'text'
    })
    dataPromise.then(function(data) {
        rawData = data;
        rawData = String(rawData);
        rawData = rawData.split(/\n/);
        for (h = 0; h < rawData.length; h++){
            rawData[h] = String(rawData[h]).split(",");
        }
    }).done(function(data){
        dataToArray(gI,actionReplayKeydown);
    })
}

function dataToArray(gI,cb) {

    var f = 0;
    var g = 0;

    for (var i = 0; i < rawData.length; i++) {
        var turnArray = [];
        if (parseInt(eval(rawData[i][1])) === gI) {
            turnArray[0] = colorToNumber(eval(rawData[i][5]));
            turnArray[1] = parseInt(eval(rawData[i][6]));
            replayArray[g] = turnArray;
            g++;
        } else {
            doNothing();
        }
    }

    cb(replayArray);
}

dataToArray函数是问题发生的地方,在行

if (parseInt(eval(rawData[i][1])) === gI) {

我认为dev工具已经指出问题发生在rawData [i] [1],但rawData是一个二维数组,索引应该工作正常(rawData的第一列包含游戏索引,我想要所有游戏索引值等于查询游戏索引的行。)

其余的代码如下,但不是有问题的。

function colorToNumber(inputColor) {
    if (inputColor === "B" ) {
        return 0
    } else {
        return 1
    }
}

function actionReplay(inputArray) {

    addStone(parseInt(inputArray[f][1]),parseInt(inputArray[f][0]));
    f++;
    $('#whiteLastMove').remove();
    $('#blackLastMove').remove();
    if ((f+1)===inputArray.length){
        $(document).off('keyup').on('keyup',function(e){
            if (e.keyCode === 32) {
                clearBoard();
                createTiles(M,N);
                replayArray = [];
                rawData="";
            }
        });
    }
}

function actionReplayKeydown() {
    $(document).off('keyup').on('keyup',function(e) {
        if (e.keyCode === 13) {
            actionReplay(replayArray);
            evaluateWin(0);
            evaluateWin(1);
        } else if (e.keyCode === 32) {
            clearBoard();
            createTiles(M,N);
            replayArray = [];
            rawData="";
        } else {
            doNothing();
        }
    });
}

function playReplay(matchID,gI) {
    openCurtain(doNothing);
    importData(matchID,gI);
}

我确定我错过了一些明显的东西,但我不是自己搞清楚。

1 个答案:

答案 0 :(得分:0)

问题是rawData [i] [1]的值存在js语法错误。如果您使用调试器,您可以看到该值并检查它是否是执行eval的有效js。