我有一个像这样的Hash,它应该被“合并”到它的uniq嵌套值
[
{
"slug": "color",
"values": [{ "slug": "amethyst" },
{ "slug": "coral" }],
},
{
"slug": "color",
"values": [{ "slug": "amethyst" }],
},
{
"slug": "power-source",
"values": [{ "slug": "110V"}],
}
]同时,它应该计算重复的值,但在items数组中使用uniq:
{ "slug": "color",
"items": [
{
"slug": "amethyst",
"count": 2
},
{
"slug": "coral",
"count": 1
}]
},
{
"slug": "power-source",
"items": [
{
"slug": "110V",
"count": 1
}]
}
]
is there a "Rails method" to achieve this?
Thank you发布于 2021-05-03 17:30:05
我认为Rails中没有内置的东西可以让你获得这样的自定义需求,但你可以通过尝试不同的方法和它们的返回值来实现:
data
.group_by { |hash| hash[:slug] }
.transform_values do |values|
values
.flat_map { |vals| vals[:values] }
.group_by { |value| value[:slug] }
.transform_values(&:count)
end.map do |slug, items|
[slug, items.map { |item, count| {slug: item, count: count} }]
end.map { |slug, items| {slug: slug, items: items} }
# [{:slug=>"color",
# :items=>[{:slug=>"amethyst", :count=>2}, {:slug=>"coral", :count=>1}]},
# {:slug=>"power-source", :items=>[{:slug=>"110V", :count=>1}]}]如您所见,您可以首先根据散列的slug值对数组中的每个散列进行分组,然后转换散列包含的值,根据数组的values键映射和展平每个数组,然后进行分组以获得它们的总和。
之后,您只需使用所需的键/值创建哈希即可。
如果你最终使用一个散列,它的关键字是"slugs“,并包含项作为它的值,那么它可能会简化一些事情。
https://stackoverflow.com/questions/67365983
复制相似问题