2011-02-13 31 views
1

我正在制作基于浏览器的游戏,其中涉及到一张地图。为了渲染地图,我使用两个循环来从json集合中检索地图数据。 JSON集看起来像这样(示例):检索与循环相关的特殊JSON值

var map = { 
'y1':{'x1':{'type':'grass'}, 'x2':{'type':'water'}, 'x3':{'type':'grass'}}, 
'y2':{'x1':{'type':'grass'}, 'x2':{'type':'water'}, 'x3':{'type':'grass'}}, 
'y3':{'x1':{'type':'grass'}, 'x2':{'type':'water'}, 'x3':{'type':'grass'}}, 
'y4':{'x1':{'type':'grass'}, 'x2':{'type':'water'}, 'x3':{'type':'grass'}}, 
'y5':{'x1':{'type':'grass'}, 'x2':{'type':'water'}, 'x3':{'type':'grass'}} 
}; 

有两个循环。一个带有与Y轴相关的变量i和与X轴相关联的变量ii。我怎样才能得到像map.yi.xii.type这样的标签的json数据?我一直试图这样做几天,但我对json很陌生,找不到任何答案。我的地图代码如下。任何帮助,将不胜感激。如果我不清楚,请让我知道,我会尽力给出更好的解释。

var create = ''; 
for(i=0; i <= 4; i++) 
{ 
    var hello="x1"; 
    create += '<table cellpadding="0" cellspacing="0"><tr>'; 
    for(ii=0; ii <= i; ii++){ 
     if(i==4 && ii==2){ 
      create += '<td class="'+map.y1.x1.type+'" align="center" valign="center"><img src="images/map/dot.gif"/></td>'; 
     } 
     else{ 
      create += '<td class="'+map.y1.x2.type+'"/>'; 
     } 
    } 
    create += '</tr></table>'; 
} 
for(x=4; x >= 0; x--) 
{ 
    create += '<table cellpadding="0" cellspacing="0"><tr>'; 
    for(xx=0; xx < x; xx++){ 
     create += '<td class="'+map.y1.x2.type+'"/>'; 
    } 
    create += '</tr></table>'; 
} 

Project Link.

+1

看起来像一个正常的JavaScript对象http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – 2011-02-13 21:56:58

+0

请不要两次提出问题 – 2011-02-13 22:00:03

回答

2

当你写道:

map.yi.yii.type

我想你的意思是:

map.yi.xii.type

如果是这样,你可以用方括号内串联。

map['y'+i]['x'+ii].type; 

...因此,如果i == 1ii == 3,你会有效地做:

map.y1.x3.type; 
0

听起来像是你需要做这样的事情:

map[y+i][x+ii] 
+0

,我会在Firebug的 “Y没有定义”=( – user440876 2011-02-12 21:24:36