I have below hash. How to get unique and merged hash.
[
{
"email"=>"user_name@aaa.com",
"expression"=>"aaa",
"name"=>"bbb",
"roles"=>[:admin]
},
{
"email"=>"user_name@aaa.com",
"expression"=>"aaa",
"name"=>"bbb",
"roles"=>[:manager]
}
]
I want below result hash that unique by email and merged by roles.
[
{
"email"=>"user_name@aaa.com",
"expression"=>"aaa",
"name"=>"bbb",
"roles"=>[:admin, :manager]
}
]
Help me.
Try this one
a.group_by { |item| item["email"] }.each_with_object([]) do |(_, items), arr|
arr.concat([items.first.merge("roles" => items.flat_map { |item| item["roles"] }.uniq)])
end