我的头发撕裂了一个语法错误:我无法弄清楚的意外标识符。我知道错误意味着什么,但据我所知,没有错。
我发布了我正在使用的整个脚本;代码的目的是允许用户一次一步地重放类似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);
}
我确定我错过了一些明显的东西,但我不是自己搞清楚。
答案 0 :(得分:0)
问题是rawData [i] [1]的值存在js语法错误。如果您使用调试器,您可以看到该值并检查它是否是执行eval的有效js。