JSON / jQuery - 在子对象和父对象之间移动

时间:2015-02-24 16:46:50

标签: javascript jquery json

我正在为纸牌游戏Hearthstone构建一个工具。如果您熟悉游戏,它基本上是一个工具,允许您将游戏卡片添加到列表中,以便您可以随时监控您剩余的卡片以及绘制X卡等的机会。没有什么太花哨的但由于我是网络开发世界的一个巨大新手,我将它用作练习,以帮助我学习更多。

无论如何我的问题!

目前我有一个JSON数据库,其中包含了万能卡中的每张卡以及与每张卡相关的所有不同参数,例如名称,成本,播放器类等。

我已经想出了如何从数据库中检索对象,但只是通过名称,因为这是玩家将用来搜索他们想要添加到他们牌组的牌。我现在遇到的问题是这个名字卡片是卡片对象的子元素,卡片对象本身是卡片组对象的子元素(基本,经典,naxx,gvg等)

我想通过名字搜索所有卡片数据但是尽可能地尝试,我无法弄清楚如何通过它的孩子与父对象交谈。

从这里开始是来自用户输入的搜索功能:

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

以下是来自数据库的请求:

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"

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

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我认为数据存储方式存在问题:

  1. 每个对象都需要具有唯一ID
  2. 每个Child对象都需要返回对parentId的引用。这需要存储在插入或创建子对象上。
  3. 需要一种通过id
  4. 查找任何对象的方法