2015-02-24 54 views
0

我目前正在为纸牌游戏Hearthstone构建一个工具。如果你熟悉游戏,它基本上是一个工具,它允许你将你的游戏套牌添加到列表中,以便随时监控你留下的卡片以及绘制X卡片的机会等等。但是因为我是Web开发领域的新手,所以我将它作为练习帮助我学习更多。JSON/jQuery - 在子对象和父对象之间移动

无论如何对我的问题!

此刻我有了在炉边每卡都与每个卡如姓名,成本playerClass等相关联的不同参数的沿

我想通了如何检索对象JSON数据库从数据库中,但只能通过名称,因为这是玩家将用来搜索他们想添加到他们的卡组的卡。我现在的问题是,卡的名称是卡对象的孩子本身就是卡组对象(基本的,经典的,naxx,gvg等等)的孩子

我想把所有的卡片数据都拿回来,当我按照名字搜索它时, ü如何通过它的孩子与父对象通话。

先从这里是从用户输入的搜索功能:

\t $.getJSON("json/AllSets.json",function(hearthStoneData){ 
 
\t \t $('.submit').click(function(){ 
 
\t \t \t var searchValue = $('#name').val(); 
 
\t \t \t var returnValue = getObjects(hearthStoneData, "name", searchValue); 
 
\t \t \t console.log(hearthStoneData); 
 
\t \t \t console.log(returnValue); 
 
\t \t }); 
 
\t });

,这里是从数据库中请求:

function getObjects(obj, key, val) { 
 
    var objects = []; 
 
    for (var i in obj) { 
 
     if (!obj.hasOwnProperty(i)) continue; 
 
     if (typeof obj[i] == 'object') { 
 
      objects = objects.concat(getObjects(obj[i], key, val)); 
 
     } else if (i == key && obj[key].toLowerCase() == val.toLowerCase()) { 
 
      objects.push(obj[i]); 
 
     } 
 
    } 
 
    return objects; 
 
}

最后,这里是我想谈谈的一个JSON卡片的例子。

{ 
 
    "id":"EX1_066","name":"Acidic Swamp Ooze",     
 
    "type":"Minion", 
 
    "faction":"Alliance", 
 
    "rarity":"Common", 
 
    "cost":2, 
 
    "attack":3, 
 
    "health":2, 
 
    "text":"<b>Battlecry:</b> Destroy your opponent's weapon.", 
 
    "flavor":"Oozes love Flamenco. Don't ask.", 
 
    "artist":"Chris Rahn", 
 
    "collectible":true, 
 
    "howToGetGold":"Unlocked at Rogue Level 57.", 
 
    "mechanics":["Battlecry"]}

所以输出即时得到当我安慰日志是这样的:

Object {Basic: Array[210], Classic: Array[387], Credits: Array[17], Curse of Naxxramas: Array[160], Debug: Array[58]…} 
 
Basic: Array[210] 
 
[0 … 99] 
 
6: Object 
 
artist: "Howard Lyon" 
 
collectible: true 
 
cost: 2 
 
faction: "Neutral" 
 
flavor: "This spell is much better than Arcane Implosion." 
 
howToGet: "Unlocked at Level 1." 
 
howToGetGold: "Unlocked at Level 28." 
 
id: "CS2_025" 
 
name: "Arcane Explosion" 
 
playerClass: "Mage" 
 
rarity: "Free" 
 
text: "Deal $1 damage to all enemy minions." 
 
type: "Spell"

正如你所看到的,有几个嵌套数组在你真正到达卡片之前。我可以在脑海中想象我认为需要做什么,但我绝对不确定。还有很多的语法已被复制/粘贴和修改以适应我的需求,我仍然是这个东西的总初学者,真的不知道我将如何自己写一个修复这个问题。

任何帮助非常感谢。

感谢

回答

0

我觉得有与数据的存储问题:

  1. 每个对象都需要有一个唯一的ID
  2. 每一个孩子对象需要返回到parentId的一个参考。这需要在插入或创建子对象时进行存储。
  3. 需要有一种方式通过ID查找任何对象
+0

感谢您的答复,我有一种感觉,就是这个问题,你有什么建议,我怎么会去这样做呢? – pragmatic84 2015-02-24 19:05:06

+0

如果你的数据库只是JSON和小,你可以手动添加这些。否则,您需要以编程方式遍历每个对象并为其指定一个唯一的ID。然后在第二遍中,遍历所有子对象,并将父ID分配给它。否则,只需选择一个对象,它本身就不会有任何周围数据的知识。下面是一个循环json对象的例子:http://stackoverflow.com/questions/684672/loop-through-javascript-object – 2015-02-24 20:54:09

+0

另一个想法是...... json并不需要嵌套。你可以有一个单一的对象数组,如var = [o1,o2,o3]。在每个oi。你可以存储两个变量:id,parentId。该id可以简单地是数组中的序数位置。然后,如果需要,可以根据需要快速向上遍历数组中的任何对象。如果你需要遍历树,那么你还需要存储childIds = [] – 2015-02-24 20:58:23