我有以下数据对象,最终在entities中会有更多类似的数据对象
function loadCardLibrary() {
var cardLibrary = {
entities: [
{
name: "Spareparts",
values: {
sickness: 0,
attack: 0,
scrap: 3,
manaCost: 0
},
apply: [
applyCreature("Mech"),
applyHealth(1),
applyNoAttack(true)
]
}
]
};
return cardLibrary;
}我试图编写一个函数(请参阅此示例)来搜索name值,然后进入该对象并搜索以检查特定的apply值,如下所示:
function checkHasNoAttack(entityName) {
for (var entity in cardLibrary.entities) {
if (cardLibrary.entities[entity].name === entityName) {
// for debugging
console.log(cardLibrary.entities[entity]);
console.log(); // blank line
for (var applied in cardLibrary.entities[entity].apply) {
if (cardLibrary.entities[entity].apply[applied].applyNoAttack === true) {
console.log(entityName + " cannot attack.");
} else {
console.log("test");
break;
}
}
}
}
}当我在那之后,像这样:
var canItAttack = checkHasNoAttack("Spareparts");...this的结果是:
{
name: 'Spareparts',
values: {
sickness: 0,
attack: 0,
scrap: 3,
manaCost: 0
},
apply: [ 'Mech', 1, true ]
}
test与来自else的else不同,我尝试记录get以响应第一个if语句,并进行日志记录:
零件不能攻击。
由于理解到更复杂的逻辑最终将取代console.log,我确实需要它来工作,但我一直在对它进行修补,我似乎无法正确地完成它。任何帮助都非常感谢!
发布于 2015-04-29 02:43:58
这很简单:
function check(a) {
var result = null;
cardLibrary.entities.forEach(function(b){
if (b.name === a) {
if (b.apply[2] === true) {
console.log(a + " cannot attack!");
} else {
console.log("test");
}
result = b;
}
});
return result;
}apply是一个数组,必须使用[2]来选择该值。
数组在这方面做得很糟糕,我建议将apply修改为如下所示的对象:
apply: {
creature: applyCreature("Mech"),
health: applyHealth(1),
noAttack: applyNoAttack(true)
}然后您可以使用以下代码:
function check(a) {
var result = null;
cardLibrary.entities.forEach(function(b){
if (b.name === a) {
if (b.apply.noAttack === true) {
console.log(a + " cannot attack!");
} else {
console.log("test");
}
result = b;
}
});
return result;
}https://stackoverflow.com/questions/29933317
复制相似问题