首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度搜索JSON值

深度搜索JSON值
EN

Stack Overflow用户
提问于 2015-04-29 02:31:55
回答 1查看 888关注 0票数 2

我有以下数据对象,最终在entities中会有更多类似的数据对象

代码语言:javascript
复制
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值,如下所示:

代码语言:javascript
复制
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;
                }
            }
        }
    }
}

当我在那之后,像这样:

代码语言:javascript
复制
var canItAttack = checkHasNoAttack("Spareparts");

...this的结果是:

代码语言:javascript
复制
{ 
    name: 'Spareparts',
    values: {
        sickness: 0,
        attack: 0,
        scrap: 3,
        manaCost: 0
    },
    apply: [ 'Mech', 1, true ]
}

test

与来自elseelse不同,我尝试记录get以响应第一个if语句,并进行日志记录:

零件不能攻击。

由于理解到更复杂的逻辑最终将取代console.log,我确实需要它来工作,但我一直在对它进行修补,我似乎无法正确地完成它。任何帮助都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-29 02:43:58

这很简单:

代码语言:javascript
复制
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修改为如下所示的对象:

代码语言:javascript
复制
apply: {
    creature: applyCreature("Mech"),
    health: applyHealth(1),
    noAttack: applyNoAttack(true)
}

然后您可以使用以下代码:

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29933317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档