使用一个对象值作为键来访问Handlebars中的其他对象值

时间:2017-09-23 18:57:38

标签: javascript arrays json object handlebars.js

我有两个不同的对象:

1)在global.json

var objA = {
    "menu": {
        "icon": [
            {
                "network": "mail",
            },
            {
                "network": "facebook",
            },
            {
                "network": "twitter",
            },
            {
                "network": "googleplus",
            }
        ]
    }
}

2)在index.json

var objB = {
    "facebook": {
        "data": "Facebook Data",
    },
    "twitter": {
        "data": "Twitter Data",
    },
    "mail": {
        "data": "Mail Data",
    },
    "googleplus": {
        "data": "GooglePlus Data",
    }
}

现在我想通过使用第一个对象值作为 .hbs 文件中的键来访问第二个对象值,就像我们在javascript中一样。

例如:如果我想访问Twitter数据,我将在javascript中使用以下代码来访问它。

for(var i=0; i<objA["menu"]["icon"].length; i++){
    console.log(objB[objA["menu"]["icon"][i]["network"]]["data"]);
}

我正在 .hbs 文件中运行每个循环:

{{#each global.objA.menu.icon}}
    <li>{{data}}</li>
{{/each}}

在这里,我想基于网络显示每个社交数据

2 个答案:

答案 0 :(得分:0)

我对把手一无所知,但假设它至少是一个javascript,

data = objA.menu.icon.map(e=>objB[e.network])

应该满足你最后的目标愿望。

&#13;
&#13;
var objA = {
    "menu": {
        "icon": [
            {
                "network": "mail",
            },
            {
                "network": "facebook",
            },
            {
                "network": "twitter",
            },
            {
                "network": "googleplus",
            }
        ]
    }
};

var objB = {
    "facebook": {
        "data": "Facebook Data",
    },
    "twitter": {
        "data": "Twitter Data",
    },
    "mail": {
        "data": "Mail Data",
    },
    "googleplus": {
        "data": "GooglePlus Data",
    }
};

data = objA.menu.icon.map(e=>objB[e.network])

console.log(data);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用lookupwith内置帮助程序的组合来完成此操作。 lookup充当使用变量键的方式,with设置上下文以允许您访问每个网络对象的属性。

{{#each global.objA.menu.icon}}
  {{#with (lookup @root/global/objB this.network)}}
    {{data}}
  {{/with}}
{{/each}}
// outputs (no formatting)
// 'Mail DataFacebook DataTwitter DataGooglePlus Data'