我正在为纸牌游戏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"
正如您所看到的,在您真正到达卡之前,有几个嵌套数组。我可以在脑海中想象我认为需要做什么,但我绝对不确定。还有很多语法被复制/粘贴和修改以满足我的需要,我仍然是这个东西的初学者,我真的不知道如何自己写这个问题的修复。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
我认为数据存储方式存在问题: