使用一个对象值作为密钥来访问其他对象值在车把

使用一个对象值作为密钥来访问其他对象值在车把

问题描述:

我有2个不同的对象:使用一个对象值作为密钥来访问其他对象值在车把

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}} 

这里我想说明基于网络每个社会数据

我有车把零知识,但假设它至少是一个JavaScript,

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

应该满足你的最后一个对象的愿望。

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);

+0

非常感谢你@marmeladze对你的帮助,时间和你的尝试,但它不是一个JavaScript。 您提供的答案不起作用。 –

可以使用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'