我正在为Jekyll编写一个插件,以便我可以比较一些产品数据, 我正在返回像我这样的哈希数组:
data = [{"current"=>"0.4mA", "power"=>"15w"}, {"current"=>"1A", "power"=>"5w"}]
但现在,当我使用liquid
遍历它们时:
<table>
{% for h in data %}
<tr>
{% for p in h %}
<td>{{ p[0] }}</td>
<td>{{ p[1] }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
当我通过哈希时,我无法并排列出属性 一次一个,所以我最终将它们放在另一个之下。
我应该从插件做什么来反过来准备数据,这样我就可以 能够在我的模板中做我想做的事情吗?
编辑:
所以要清理一下,如何从上面的数组中获取以下结构 使用纯红宝石的哈希?:
p1['current'] = '0.4mA'
p1['power'] = '15w'
... *may have more of these, depending on number of key:value pairs in the hash
p1['...'] = '...'
p2['current'] = '1A'
p2['power'] = '5w'
... *may have more of these, depending on number of key:value pairs in the hash
p2['...'] = '...'
答案 0 :(得分:2)
如果您希望显示在行中的属性(例如,“当前”一行,“电源”一行等),并且您不想对显示模板进行任何更改,则可以转换数据像这样的Ruby中的哈希 - 以下之一(可能两者)应该适用于您的模板:
如果你知道data
中的每个哈希都有所有键,你可以从第一个元素中取出键:
keys = data[0].keys
如果数据中的哈希值可能会在数据无意义时省略键,则可以在data
keys = data.map(&:keys).flatten.uniq
new_data_array = keys.map { |a| data.map { |d| d[a] } }
=> [["0.4mA", "1A"], ["15w", "5w"]]
new_data_hash = Hash[keys.map {|a| [a, data.map { |d| d[a] }] }]
=> {"current"=>["0.4mA", "1A"], "power"=>["15w", "5w"]}
以下是如何绕过数据数组,直接从一行中的h1和h2获取值:
Hash[(h1.keys & h2.keys).map {|a| [a, [h1, h2].map { |d| d[a] }] }]
=> {"current"=>["0.4mA", "1A"], "power"=>["15w", "5w"]}
(h1.keys & h2.keys).map {|a| [h1, h2].map { |d| d[a] } }
=> [["0.4mA", "1A"], ["15w", "5w"]]
答案 1 :(得分:1)
我不熟悉液体的语法,但我认为{% <ruby code> %}
和{{ <ruby code> }}
类似于.erb&#39; s <% <ruby code> %>
和{{1 }}。在这种情况下,您可以执行以下操作:
[&#39; current&#39;,&#39; power&#39;]。每个人都做| a | data.each do | d |放d [a] end end
<%= <ruby code> %>