转换" object.property" to" object [property]"在Ruby

时间:2016-03-07 14:00:59

标签: ruby split

说我有"object.property.property"之类的字符串,我希望能够使用这些字符串为这些属性动态创建表单字段;我需要将它们转换为"object[property][property]"

我尝试的是:"object.property.property".split('.')

当然,我有一个数组:["object", "property", "property"]

但我不确定如何重新加入它们,因此属性被括号("object[property][property]")包围。我尝试使用join,但据我所知,只允许您指定数组中每个元素之间的分隔符。

任何想法都赞赏。

4 个答案:

答案 0 :(得分:3)

这是一个选项

Error   C1189   #error:  include 'stdafx.h' before including this file for PCH  

答案 1 :(得分:2)

"object.property.property".gsub('.', '][').sub('][', '[') << ']'

或者,效率较低,但更具可读性:

arr = "object.property.property".split('.')
[arr.shift, *arr.map { |e| "[#{e}]" }].join

答案 2 :(得分:2)

啊,红宝石的美丽:

obj, *props = "object.property.property".split('.')
obj   #=> "object"
props #=> ["property", "property"]

"#{obj}[#{props.join('][')}]"
#=> "object[property][property]"

更新:还包括没有属性的对象:

def form_name(property)
  obj, *props = property.split('.')
  "#{obj}[#{props.join('][')}]"
  props.any? ? "#{obj}[#{props.join('][')}]" : obj
end

form_name "object.property.property"
#=> "object[property][property]"
form_name "object"
#=> "object"

答案 3 :(得分:0)

我会建议:

"object.property.property".gsub(/\.([\w\d_]+[^\.])/, "[#{$1}]")

虽然只有了解Regular Expressions的人才能阅读。