Imagine este objeto (‘hash’)
accessing =
an:
deeply:
nested:
attribute:
yeah: 'yeah yeah'
console.log accessing.an.deeply.nested.attribute.yeah
#output: yeah yeah
Como acessar isso com uma string dinâmica? Reduza (de underscore.js ou mesmo o nativo em Javascript 1.8 virá para resgatar!
#use reduce to follow the key chain
window.t = (key, obj)->
_(key.split('.')).reduce( ((obj, key)-> obj[key]), obj)
#pass the chained key to access and the object
console.log t('an.deeply.nested.attribute.yeah', accessing)
#output: yeah yeah
Eu uso isso para acessar minhas traduções em Rails em JS. Preste atenção ao tratamento de erros (por exemplo, chave não encontrada)