我目前正在为纸牌游戏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"
正如你所看到的,有几个嵌套数组在你真正到达卡片之前。我可以在脑海中想象我认为需要做什么,但我绝对不确定。还有很多的语法已被复制/粘贴和修改以适应我的需求,我仍然是这个东西的总初学者,真的不知道我将如何自己写一个修复这个问题。
任何帮助非常感谢。
感谢
感谢您的答复,我有一种感觉,就是这个问题,你有什么建议,我怎么会去这样做呢? – pragmatic84 2015-02-24 19:05:06
如果你的数据库只是JSON和小,你可以手动添加这些。否则,您需要以编程方式遍历每个对象并为其指定一个唯一的ID。然后在第二遍中,遍历所有子对象,并将父ID分配给它。否则,只需选择一个对象,它本身就不会有任何周围数据的知识。下面是一个循环json对象的例子:http://stackoverflow.com/questions/684672/loop-through-javascript-object – 2015-02-24 20:54:09
另一个想法是...... json并不需要嵌套。你可以有一个单一的对象数组,如var = [o1,o2,o3]。在每个oi。你可以存储两个变量:id,parentId。该id可以简单地是数组中的序数位置。然后,如果需要,可以根据需要快速向上遍历数组中的任何对象。如果你需要遍历树,那么你还需要存储childIds = [] – 2015-02-24 20:58:23