将javascript字符串拆分为数组
我有以下脚本字符串: 响应将javascript字符串拆分为数组,javascript,arrays,Javascript,Arrays,我有以下脚本字符串: 响应 "[[[#],[b,#],[b,w,b,b,b,#],[b,#],[b,w,w,b,#]],[[b,#],[b,b,#],[b,b,w,#],[b,b,b,#],[b,b,#]],[[b,#],[b,b,b,b,#],[b,w,#],[b,b,b,#],[b,#]],[[b,#],[b,#],[w,w,w,#],[b,b,w,w,#],[b,w,#]],[[b,#],[b,b,b,b,#],[b,w,b,#],[b,w,#],[b,b,#]]]" 这对应于一个棋盘游
"[[[#],[b,#],[b,w,b,b,b,#],[b,#],[b,w,w,b,#]],[[b,#],[b,b,#],[b,b,w,#],[b,b,b,#],[b,b,#]],[[b,#],[b,b,b,b,#],[b,w,#],[b,b,b,#],[b,#]],[[b,#],[b,#],[w,w,w,#],[b,b,w,w,#],[b,w,#]],[[b,#],[b,b,b,b,#],[b,w,b,#],[b,w,#],[b,b,#]]]"
这对应于一个棋盘游戏,并且哪个字段(例如[b,w,b,b,b,#])是一个具有b缺少和w白色棋子的单元格。#是堆栈的顶部
为了创建一个tile数组,我需要解析它
我有这个:
XMLscene.prototype.readBoard = function(data){
var response = data.target.response;
console.log("REPONSE NO PARS" + response);
response = response.split("],");
console.log("REPONSE " + response);
response[0] = response[0].substring(1);
response[5] = response[5].substring(0, response[5].length - 2);
for(var i = 0; i < response.length; i++)
{
response[i] = response[i].substring(1);
response[i] = response[i].split("),");
for(var j = 0; j < response[i].length; j++)
response[i][j] = response[i][j].substring(5);
}
this.scene.board.loadTiles(response);
//this.scene.client.getPrologRequest('quit', 0, 1);
};
xmlsecene.prototype.readBoard=函数(数据){
var响应=data.target.response;
控制台日志(“响应无PAR”+响应);
response=response.split(“],”);
控制台日志(“响应”+响应);
响应[0]=响应[0]。子字符串(1);
响应[5]=响应[5]。子字符串(0,响应[5]。长度-2);
对于(变量i=0;i
要在此函数中进行分析,请执行以下操作:
gameBoard.prototype.loadTiles = function(board){
console.log("BOARD : " + board);
this.tiles = [];
for (var i = 0; i < board.length; i++){
for (var j = 0; j < board[i].length; j++){
var player = board[i][j].split(",")[0];
console.log("PLAYER : " + player);
var type = board[i][j].split(",")[1];
console.log("Type : " + type);
if (type != "e") {
var tile = this.createTile(type, this.scene ,i*6 + j+100, player);
tile.line = i;
tile.col = j;
this.tiles.push(tile);
}
}
}
}
gameBoard.prototype.loadTiles=功能(板){
控制台日志(“板:+BOARD”);
this.tiles=[];
对于(变量i=0;i
我想要的董事会结构如下:
对于第一个堆栈:[#]
是个空牢房
[b,#]
-一块电池-黑色
[b,w,w,b,#]
一个单元格,底部有一个黑色部分,顶部有两个白色部分和一个黑色部分,因此黑色播放器是堆栈的所有者
堆栈所有者是将其棋子放在堆栈顶部(最接近#)的玩家
有没有办法得到一个数组,每个堆栈都是数组的元素
请修改您的字符串,使其如下所示
var myString = '[[[#],[b,#],[b,w,b,b,b,#],[b,#],[b,w,w,b,#]],[[b,#],[b,b,#],[b,b,w,#],[b,b,b,#],[b,b,#]],[[b,#],[b,b,b,b,#],[b,w,#],[b,b,b,#],[b,#]],[[b,#],[b,#],[w,w,w,#],[b,b,w,w,#],[b,w,#]],[[b,#],[b,b,b,b,#],[b,w,b,#],[b,w,#],[b,b,#]]]'
将元素替换为“”
现在运行以下命令:
var myArrayObject = JSON.parse(myString);
您刚刚将其转换为数组
示例代码:
修改字符串,使其如下所示
var myString = '[[[#],[b,#],[b,w,b,b,b,#],[b,#],[b,w,w,b,#]],[[b,#],[b,b,#],[b,b,w,#],[b,b,b,#],[b,b,#]],[[b,#],[b,b,b,b,#],[b,w,#],[b,b,b,#],[b,#]],[[b,#],[b,#],[w,w,w,#],[b,b,w,w,#],[b,w,#]],[[b,#],[b,b,b,b,#],[b,w,b,#],[b,w,#],[b,b,#]]]'
将元素替换为“”
现在运行以下命令:
var myArrayObject = JSON.parse(myString);
您刚刚将其转换为数组
示例代码:
您可以像这样将数据转换为JSON,忽略散列,因为它们似乎提供了已知的信息(堆栈在右侧结束): 例如,您可以在(i,j)处为堆栈识别当前播放器,如下所示:
var player = board[i][j].slice(-1)[0]; // last element on the stack
片段:
//示例数据
(b,w,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,,,[b,[b,35;,[b,(b,b,b,b,w,w,w,b,w,b,[b,b,w,w,[b,[b,b,[b,w,b,b,b,b,b,b,,,[b,,,[b,,[b,b,,,,,,[b,,,[b,b,b,,,,,,,[b,b,b,b,w,b,b,w,b,b,b,b,b,b,b,b,b,b,b,b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,[[[[b,,,,,,,,,,,,,,#]]、[[b,#]]、[b,#]、[w,w,w,#]、[b,b,w,w,#]、[b,w,#]、[b,#]、[b,b,b,b,b,#]、[b,w,b,#]、[b,w,#]、[b,w,#]、[b,b,#]、[b,b,#]];
//转换为嵌套数组
var board=JSON.parse(response.replace(/,?#/g',).replace(/[bw]/g',“$&”);
//在3,3处打印堆栈
log(board[3][3].join(',');
//打印该堆栈的播放器:
console.log(board[3][3].slice(-1)[0])代码>您可以像这样将数据转换为JSON,忽略散列,因为它们似乎提供了已知的信息(堆栈在右侧结束):
例如,您可以在(i,j)处为堆栈识别当前播放器,如下所示:
var player = board[i][j].slice(-1)[0]; // last element on the stack
片段:
//示例数据
(b,w,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,,,[b,[b,35;,[b,(b,b,b,b,w,w,w,b,w,b,[b,b,w,w,[b,[b,b,[b,w,b,b,b,b,b,b,,,[b,,,[b,,[b,b,,,,,,[b,,,[b,b,b,,,,,,,[b,b,b,b,w,b,b,w,b,b,b,b,b,b,b,b,b,b,b,b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,[[[[b,,,,,,,,,,,,,,#]]、[[b,#]]、[b,#]、[w,w,w,#]、[b,b,w,w,#]、[b,w,#]、[b,#]、[b,b,b,b,b,#]、[b,w,b,#]、[b,w,#]、[b,w,#]、[b,b,#]、[b,b,#]];
//转换为嵌套数组
var board=JSON.parse(response.replace(/,?#/g',).replace(/[bw]/g',“$&”);
//在3,3处打印堆栈
log(board[3][3].join(',');
//打印该堆栈的播放器:
console.log(board[3][3].slice(-1)[0])代码>一个快速而肮脏的解决方案是使用引用所有元素,然后将整个结果放入:
[b,w,b,b,b,b,b,b,b,b,b,b,b,#,[b,[b,[b,[b,[b,[b,[b,[b,[b,w,w,w,w,b,[b,w,w,w,b,[b,[b,[b,[b,b,b,b,b,b,b,b,b,b,b,b,b,,,[b,,[b,,,[b,,[b,,[b,,,[b,,[b,,,,,,[b,,,,[b,,[b,,,,,,,[b,[b,b,b,b,b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,[b,w,w,w,w,#],[b,w,#],[b,w,w,w,#],[b,w,#],[b,w,#],[b,#],[b,b,b,b,#],[b,b,w,b,#],[b,w,#],[b,w,#],[b,b,#],[b,b,#];
var res=eval(str.replace(/[bw#]/g,“$&”);
控制台日志(res);
一个快速而肮脏的解决方案是使用引用所有元素,然后将整个结果放入:
[b,w,b,b,b,b,b,b,b,b,b,b,b,#,[b,[b,[b,[b,[b,[b,[b,[b,[b,w,w,w,w,b,[b,w,w,w,b,[b,[b,[b,[b,b,b,b,b,b,b,b,b,b,b,b,b,,,[b,,[b,,,[b,,[b,,[b,,,[b,,[b,,,,,,[b,,,,[b,,[b,,,,,,,[b,[b,b,b,b,b,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,[b,w,w,w,w,#],[b,w,#],[b,w,w,w,#],[b,w,#],[b,w,#],[b,#],[b,b,b,b,#],[b,b,w,b,#],[b,w,#],[b,w,#],[b,b,#],[b,b,#];
var res=eval(str.replace(/[bw#]/g,“$&”);
控制台日志(res);
您从哪里获取字符串?有没有可能把它变成真正的JSON?它是从PROLOG程序中解析出来的。它在一个sicstus prolog程序上代表我的电路板,然后你可以进一步将其解析为JSON格式,然后将其解析为javascript对象,这应该比直接将字符串解析为对象要容易得多,因为我有一个#?我做了类似于response=JSON.parse(response)的事情
JSON.parse(yourString.replace(/[bw#]/g,“$&”)
从哪里获取字符串?有没有可能把它变成真正的JSON?它是从PROLOG程序中解析出来的。它在一个sicstus prolog程序上代表我的电路板,然后你可以进一步将其解析为JSON格式,然后将其解析为javascript对象,这应该比直接将字符串解析为对象要容易得多,因为我有一个#?我