简化CoffeeScript语句

时间:2011-11-29 19:57:32

标签: coffeescript

我正在尝试处理一个简单的案例,我可以获得一个对象或字典。所以我要么得到一个像这样的对象:

obj.fields.nick

或者它将成为像

这样的字典
obj['nick']

我想知道是否有更简单的方法来执行以下操作:

value = (eval("obj.fields." + field[1]) if obj?.fields ) ? eval("obj['#{field[1]}']")

我希望做类似的事情:

value = (obj?.fields?."#{field[1]}" ) ? eval("obj['#{field[1]}']")  

但如果有效,我就不会写这篇文章......

我基本上在寻找一种方法来执行字符串作为if

的一部分

2 个答案:

答案 0 :(得分:5)

value = obj.fields?[field] ? obj[field]
# or
value = (obj.fields ? obj)[field]

这与

相同
if obj.fields?
    obj.fields[field]
else
    obj[field]

绝对不需要eval

答案 1 :(得分:0)

字符串插值构造("Equals four: #{2+2}")是由coffeescript编译器处理的,因此不能在eval内工作。但假设字符串中的内容命名没有改变,您可以轻松地重写它,以便eval("obj['#{field[1]}']")变为eval("obj['"+field[1]+"']")。假设我的问题当然正确。